これらのダイアログの一部が言っているにもかかわらず、悪意のあることはできません。[ OK ] または[ ページを離れる ]をクリックして、問題のあるページを結果なしで閉じることができます。
ダイアログが長すぎてボタンが画面から外れている場合は、を押しEnterてページを閉じることを確認できます。
キーボード(タッチスクリーンデバイス)をお持ちでない場合は、以下のブックマークレットを使用するか、SimpleSimonの回答をご覧ください(Chromeのみ)。
さて、いくつかの詳細。
ページが閉じているときに何らかのアクションを実行する唯一の方法は、onbeforeunload
イベントを使用することです。もちろん、これはユーザーに対して簡単に使用できます(たとえば、ユーザーがページを閉じようとしたとき、新しいウィンドウでコピーを開きます)。そのため、非常に制限されています。
実際にできる唯一の合理的な方法は、カスタムテキストと2つのボタンを備えたダイアログを開くことです。1つはページから移動し、もう1つはそのままにします。ページがそのダイアログでできることは、そのテキストを定義することだけです。ボタンとタイトルバーは不変です。Firefox 3.6のスクリーンショットを次に示します。(Firefoxの非常に古いバージョン)
もちろん、ユーザーに任意のテキストと[ OK] / [キャンセル]ボタンだけでポップアップを表示できるようにすると、遅かれ早かれ一部の人がそれを使用することを確信できます。
上記のスクリーンショットでは、「OK」は単に「このページを離れる」ことを意味しますが、カスタムの説明はさらに何かを示唆しています。そのため、ブラウザはダイアログを変更しているため、誤解を招きにくくしています。たとえば、最近のバージョンのFirefoxはカスタムテキストを無視しているようです:
Chromeはカスタムテキストを表示しますが、ユーザーに何をしたいかを尋ねる質問を常に追加し、ボタンはアクションを明示的に示します(ただし、「猫の動画」メッセージが表示される傾向があります!)
以下はInternet Explorer 10でもあります。これは "cat-prone"です:
Opera 12はonbeforeunload
イベントを無視するだけで、そのようなタブを閉じようとすると、他のタブと同じように閉じます。ただし、最新のOperaはテストしていません。
したがって、最も重要なことをまとめると:
- ページは、テキストを含むダイアログを表示できません。Webサイトは、ブラウザにカスタムテキストを含むダイアログを表示するように要求できますが、ブラウザはそれを完全に無視するか(Opera)、汎用テキストを使用する(Firefox)、または何が起こるかを明示的に言うことができます(Chrome、IE)。
- ダイアログの詳細は使用しているブラウザによって異なりますが、ボタンは常に不変です。どちらが何をするかを明示的に言わない場合、OKは「このページを離れる*」を意味し、「キャンセル」は「ここにとどまる」ことを意味します。
- Webサイトは、ユーザーがWebサイトを離れる場合、悪意のあるアクションを実行できません。ファイルが猫のビデオに置き換えられることはありません。135234ウイルスに感染することも、コンピューターに違法なソフトウェアがあることをFBIに知らせることもありません。
onbeforeunload
必要に応じてイベントを無効にして、ページから退去または滞在を求められないようにすることができます。これがクロスブラウザのユーザースクリプトです。(リンクが停止している場合はスクロールダウンしてください)
悪意のあるポップアップを表示している特定のWebサイトを開いているときに、[ Leave ]をクリックするのがまだ怖い場合は、ブックマークレットを作成して削除できます。ブックマークバーを右クリックして、[ 新しいブックマーク(または同等のもの)]を選択し、これを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>
userscriptリンクは今は死んでいるようですので、ここに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);