ページを離れるときに発生する JavaScript アラートを防ぐにはどうすればよいでしょうか?

ページを離れるときに発生する JavaScript アラートを防ぐにはどうすればよいでしょうか?

多くのページには、ページを離れるときに警告が表示されます。タブを閉じたり、保存せずに移動したりした場合、サイトが警告を表示したり、警告を確認するまで移動をブロックしたりする理由は多数あります (例: 「このページから移動してもよろしいですか?」)。

これは通常、onbeforeunloadand/oronunloadハンドラーを使用して実行されます。

ここは一例です。

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

onbeforeunloadハンドラはonunload引き続き実行される必要がありますが、ユーザーをブロックするような処理は実行できないようにする必要があります。つまり、アラートは表示されず、数秒以上かかる操作も実行されません。

特定のページのJavaScriptを編集/Greasemonkeyパッチするプラグインをいくつか見つけ、そのコードを少しいじって、より普遍的に適用できるようにしました。しかし、私はどれでもユーザーの退出をブロックしようとするページ。

答え1

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

window.onbeforeunload = null;

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

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

ただし、一部のページでは、この機能が正当な目的で使用されていることに注意してください。YouTube のアップロード ページを例に挙げましょう。アップロード中に別のページに移動すると、何時間もかけて作成した作業が失われる可能性があります。また、入力中の Web フォームを再度入力したくない場合や、メッセージ (フォーラム/電子メール) を再入力したくない場合もあります。この機能により、保護されます。

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

しかし、明らかに、多くのページがこれを悪用していることは誰もが知っています。したがって、これを機能させたいページがわかっている場合は、常にホワイト リスト システムを使用できます。window.onbeforeunloadと、それが実行する可能性のある (おそらく適切な) アクションを完全にブロックせずに、このアクションをブロックする方法は実際にはありません。

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

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

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

さらに、方法を見つけたとしても、AJAX は失敗します。ポップアップはリクエストが通過する時間を与えるもので、ポップアップがなければデータが失われる可能性があります。

に関してはonunload、これでブロックすることはできないはずです。ページはアンロードされます。ただし、安全のために、常に を実行してwindow.onunload = null;対処する必要があります。

答え2

    // ==/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);

答え3

Windowsシステム上の迷惑なポップアップを処理できる便利なツールがあります -クリックオフからダウンロードできますここ確認したところ、SharePoint サイトの「変更内容は保存されない可能性があります」という警告で動作します。

関連情報