StackExchangeなどの一部のサイトでは、「このページから移動しますか?」というポップアップが表示されます。投稿がある場合など、特定の条件下でダイアログを閉じようとすると、編集が完了していません。これは役に立ちます。
残念なことに、悪意のあるサイトや感染したサイトでも、同じ機能を使用して次のように述べています。 マルウェア私たちは間違いなくあなたのコンピュータ上で見つけることについてうそをついていない111のウイルスに対処するためのウイルス対策!」と「このページを残す」と「このページに留まる」オプションは「安全であること」のようなものに置き換えられます。私たちの製品をインストールし、そして「自分の足で撃ってください」これは役に立ちません!
Javascriptは厄介なことをすることがあります。私が明らかに悪意のあるサイトを離れようとしないようにこれらのダイアログの1つを取得しようとするとき、私の応答はどうあるべきですか? [このページをそのままにする]をクリックしても安全ですか。サイトがボタンの動作を変更したり、攻撃者がボタンをクリックしたときに望んでいたような、別の場所に移動して偽のダイアログを描こうとする試みを阻止することはできますか?
これらのダイアログのいくつかが言っていることにもかかわらず、彼らは悪意のあることをすることはできません。いつでもOKまたはページを離れるをクリックして問題のないページを閉じることができます。
ダイアログが長すぎてボタンが画面の外にある場合は、を押してください。 Enterページを閉じることを確認するために。
キーボード(タッチスクリーンデバイス)がない場合は、下のブックマークレットを使用するか、 SimpleSimon's answer (Chromeのみ)を参照してください。
今、いくつかの詳細。
ページが閉じているときに何らかのアクションを実行するには、 onbeforeunload
イベントを使用する方法しかありません。もちろん、これはユーザーに対して簡単に使用できます(たとえば、彼がページを閉じようとすると、新しいウィンドウでそのコピーが開きます)ので、非常に制限されています。
実際にできる唯一の合理的なことは、カスタムテキストと2つのボタンを持つダイアログを開くことです。1つはページを離れるため、もう1つは残ります。そのダイアログでページができることだけがそのテキストを定義することです。ボタンとタイトルバーは不変です。これはFirefox 3.6からのスクリーンショットです:(Firefoxの非常に古いバージョン)
もちろん、任意のテキストとちょうどOK /キャンセルボタンを使ってポップアップを表示させると、すぐにそれを確認できます。後で何人かの人があなたに対してそれを使うでしょう。
上のスクリーンショットでOKは単に「このページを離れる」という意味ですが、カスタムの説明ではそれ以上のことを示唆しています。ブラウザはダイアログを変更したため、誤解を招くようにするのは困難です。たとえば、最近のバージョンのFirefoxはカスタムテキストを無視するようです。
Chromeはカスタムテキストを表示しますが、ユーザーに何をしたいのかを尋ねる質問を常に追加し、ボタンにはそれらのアクションを明示的に示します(ただし、それでも「猫のビデオ」メッセージが出やすい)。
これはInternet Explorer 10で、「猫が発生しやすい」ものです。
Opera 12はonbeforeunload
イベントを無視するだけで、そのようなタブを閉じようとすると他のタブと同じように閉じます。ただし、最新のOperaはテストしていません。
だから、最も重要なことをまとめると:
必要に応じてonbeforeunload
イベントを無効にすることで、ページからの退席または滞在の確認を効果的に防ぐことができます。これはクロスブラウザです serscript 。 (リンクが切れている場合は下にスクロールします)
悪意のあるポップアップが表示されている特定のWebサイトを開いていても、[終了]をクリックするのが怖い場合は、ブックマークレットを作成して削除できます。ブックマークバーを右クリックし、新しいブックマーク(または同等のもの)を選択し、これをURLとして貼り付けます。(上記のリンクからの最小のコードです)
javascript:var x=document.createElement('script');x.type='text/javascript';x.innerHTML='onbeforeunload=function(){};';document.body.appendChild(x);
それからそのブックマークをクリックするだけでポップアップはアクティブページから一時的に削除されます。
これらのポップアップがブラウザでどのように見えるか、またはブックマークレット/ユーザスクリプトをテストする場合は、次のコードを含むテキストファイルを作成して.html
ファイルとして保存します。
<html><body onbeforeunload="return 'My custom text.'">_</body></html>
ユーザースクリプトのリンクは現在無効になっているようですので、 archive.org cache から抜粋したコピーを次に示します。元のスクリプト作成者のためのすべてのクレジット。
// ==UserScript==
// @name Disable - remove onbeforeunload
// @namespace
// @description Disable - remove the annoying onbeforeunload event
// @include *
// @author netvisiteurs.com
// ==/UserScript==
var x = document.createElement('script');
x.type = 'text/javascript';
x.innerHTML = 'onbeforeunload = function() {};';
document.body.appendChild(x);
実際には、FireFoxにはかなり気の利いた(そして簡単な)解決方法があります。あなたがタイプするなら
about:config
アドレスバーに移動し、次に下にスクロールします。
dom.disable_beforeunload
そしてその値をTrueに設定すると、Leave Pageポップアップは表示されなくなります。 FireFoxで。残念ながら、Chromeにも同様の回避策はありません。
Chromeで最も簡単な解決策はタブをクラッシュさせることです。
アドレスバーにchrome:// crashを入力し、ブックマークとして保存します。
次回そのようなページを離れたい場合は、ブックマークをクリックするだけで、他のタブに影響を与えることなく、そのタブを即座に削除できます。他の人が示唆しているように、ブラウザセッション全体を終了する必要はありません。
あるいは、chrome:// hangを使用してタブをハングさせ、JavaScriptを実行せずに単にタブを閉じることもできます。
他のブラウザでこれが可能かどうかわからない。
これはwindow.onbeforeunloadイベントであり、Webブラウザの機能です。それでこれはウェブブラウザの固定されたダイアログであるべきです。あなたは別のブラウザで試すことができますので、あなたが見ることができるように、ダイアログは異なるデザインになっています。
しかし、私はあなたがJavaScriptを使ってポップアップを開発することができると思います。それはブラウザのものの元のポップアップと非常によく似ているように見えます。そしてそれが良い開発者であれば、彼はダイアログを表示する前にブラウザの種類もチェックするでしょう。 ;)
そのため、元のダイアログについて非常に確実にするために、正しいダイアログを並行してクロスチェックする必要があります。つまり、 http://samples.msdn.Microsoft.com/workshop/samples/author/dhtml/refsです。 /onbeforeunload.htm
イベントの詳細については、こちらを参照してください。
https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload
http://msdn.Microsoft.com/ja-jp/library/ms536907%28VS.85%29.aspx
あなたが「ポップアップ」とその意図/行動を信頼しない場合の素早い回避策:
Chromeの場合:
ポップアップを削除するためのエスケープ
ページを右クリック
検査を選択
上にスクロールする
タグを右クリック
ノードを削除
タブを閉じる
他のブラウザも同様のオプションを持っていると思います。