web-dev-qa-db-ja.com

ページを離れるときに起動するJavaScriptアラートを防ぐ方法は?

多くのページには、ページを離れるときにアラートが表示されます。タブを閉じたり、保存せずに移動したりする場合、アラートを確認するまで、サイトがアラートを表示したり、サイトを離れないようにする理由は数多くあります。 「このページから移動してよろしいですか?」.

これは通常、onbeforeunloadおよびonunloadハンドラーで行われます。

ここ は例です。

それらのハンドラーによって生成されたアラート/ユーザーブロックイベントを防ぐ方法はありますか?基本的には、JSを有効にしたままにし、余分なクリックを行わずにページを離れることを妨げるような行為は特に禁止します。

onbeforeunloadおよびonunloadハンドラーは引き続き起動するはずです。ユーザーをブロックすることを許可されるべきではありません。つまり、アラートも、数秒以上かかる操作もありません。

特定のページのJavaScriptを編集/グリースモンキーパッチするプラグインをいくつか見つけて、コードを少し試して、より広く適用できるようにしました。ただし、ユーザー出口をブロックしようとするanyページで機能する解決策を見つけたいと思っています。

12
Zac B

ええと、最も簡単なことは、ページスクリプトを直接オーバーライドして、イベントをnullに再度割り当てることです。

_window.onbeforeunload = null;
_

本当に悪意のあるものでない限り、これはどこでも機能し、自分自身で再割り当てし続ける必要があります。そのような場合、nullを設定し続けるループはおそらく機能します。

_while(true) {
    if (window.onbeforeunload != null) {
        window.onbeforeunload = null;
    }
}
_

警告されますが、一部のページではこれを有効に使用しています。 YouTubeのアップロードページをご覧ください:アップロード中に別の場所に移動すると、何時間も進行していない可能性があります。または、再度入力したくないWebフォーム、または再入力したくないメッセージ(フォーラム/電子メール)。この機能により、あなたは保護されます。

もう1つの問題は、AJAXによるデータの保存などの副次的な目的でこれを使用するページです。ユーザーはこのイベントを使用して保存アクションをトリガーし、ユーザーがボタンをクリックしてリクエストが完了するまでに時間がかかることを期待しています。繰り返しますが、これはしばしばあなたをあなた自身から救うために行われます。

しかし、明らかに、多くのページがこれを悪用に使用していることは誰もが知っています。ですから、作業したいページを知っている場合は、常にホワイトリストシステムを使用できます。 _window.onbeforeunload_を完全にブロックせずにこのアクションをブロックする方法はありません。

ポップアップボックスを停止する間、適切なアクションを維持する方法はありません(特定のページコードの事前の知識がなければ)。このボックスはnot an alert()です。ボックスは、onbeforeunloadの意図した動作として、ブラウザによって生成されます。 _window.onbeforeunload_に割り当てる関数が文字列を返すようにすることで作成します。その文字列はポップアップに表示されます。

_window.onbeforeunload = function() {
    //Whatever
    return "WARNING! You have unsaved changes that may be lost!";
}
_

したがって、関数を消去せずにポップアップをブロックすることはできません。

さらに、方法を見つけた場合、AJAX=は失敗します。ポップアップは、要求を通過する時間を与えます。それがないと、データが失われる可能性があります。

onunloadに関しては、これでブロックすることはできません。発火するのでafterページはアンロードされます。ただし、安全のために、いつでも_window.onunload = null;_を実行できますので、注意してください。

7
zeel
    // ==/UserScript==

var th = document.getElementsByTagName('body')[0];
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
s.innerHTML = "window.onbeforeunload = function() {}";
th.appendChild(s);
0
anywho

Windowsシステムの迷惑なポップアップを処理できる素敵なツールがあります-ClickOffhere からダウンロードできます。チェックしたところ、SharePointサイトの「行った変更が保存されない可能性があります」という警告が表示されました。

0
Serhiy