0

次のように定義されたunloadおよびbeforeunloadイベントがあります。

   window.onunload =  (function () {
        alert("In unload); } ());
   window.beforeonunload = (function () {
        alert("In unload); } ());

ページが初めて読み込まれるとき、またはポストバックの後で(前ではなく)読み込まれると、アラートが表示されます。すべきではありません。これはFirefoxとChromeで発生しますが、IEでは発生しません。なんで?IEの動作は正しいようです。

4

1 に答える 1

1

さて、まず第一に、あなたはsの引用符が欠落しているので、それはまったくalert警告するべきではありません。

実際の質問に対処するには、関数を宣言するだけでなく、関数を呼び出します。

(function (){
    alert();
}())

(あなたも書きbeforeonunloadます。それは正しくありません。そうあるべきですonbeforeunload) 

これにより無名関数が作成され、すぐに呼び出されます。それらは一般的にJavaScriptではIIFEと呼ばれます。イベントハンドラーを追加するには、関数への参照を渡す必要があります。したがって、ここでの正しい方法は次のようになります。

window.onunload =  function () {
     alert("In unload");
};
window.onbeforeunload = function () {
     alert("In unload");
};​

undefinedあなたの場合、無名関数は何もしないので、イベントに割り当てられているのはreturnです。return関数を編集すれば完全に機能します。

Chromeは、アラートonunloadとonbeforeunloadをブロックする傾向があります。これらは通常、ユーザーが離れることを阻止しようとするスパムWebサイトであるためです。ただし、 Aconsole.logは完全に機能します。デモを確認してください。コンソールを開き、[実行]をクリックすると、コードが更新され、フレームが再読み込みされ、ページがアンロードされてから再度読み込まれる直前にイベントが発生します。

于 2012-10-23T07:39:41.097 に答える