38

私はこのコードを書きました

function winUnload() {
    alert("Unload Window");
    MyMethod();
}

window.onunload = function() { winUnload(); }

このコードは IE と Firefox で正常に動作します。しかし、このコードは Chrome では機能しません。ステートメントalert("Unload Window");とステートメントの両方が機能しMyMethod();ていません。

4

7 に答える 7

60

unload イベント内の chrome で動作しないアクションがいくつかあります。アラートまたは確認ボックスはそのようなものです。

しかし、可能なこと(AFAIK):

  1. ポップアップを開く (window.open を使用) - サイトでポップアップ ブロッカーが無効になっている場合、これは機能します。
  2. 単純な文字列を (beforeunload イベントで) 返します。これは確認ボックスをトリガーし、ページを離れたいかどうかをユーザーに尋ねます。

#2 の例:

$(window).on('beforeunload', function() {
    return 'Your own message goes here...';
});

デモ: http://jsfiddle.net/PQz5k/

于 2012-02-17T09:27:57.480 に答える
8

これが古いことは知っていますが、Chrome を使用してアンロードを機能させる方法を見つけました

window.onbeforeunload = function () {
  myFunction();
};
于 2015-09-11T17:45:13.917 に答える
6

Arminの答えはとても役に立ちます、ありがとう。#2 は、ほとんどのブラウザで機能するアンロード イベントを設定しようとするときに知っておくべき最も重要なことです。alert() または confirm() はできませんが、文字列を返すと確認モーダルが生成されます。

しかし、文字列を返すだけでも、Mootools (この例ではバージョン 1.4.5 を使用) に固有のクロスブラウザーの問題がいくつかあることがわかりました。この Mootools 固有の実装は、Firefox ではうまく機能しましたが、Chrome や Safari では確認ポップアップが表示されませんでした:

window.addEvent("beforeunload", function() {
    return "Are you sure you want to leave this page?";
});

したがって、onbeforeonload イベントを複数のブラウザーで機能させるには、JavaScript ネイティブ コールを使用する必要がありました。

window.onbeforeunload = function() {
    return "Are you sure you want to leave this page?";
}

なぜこれが当てはまるのか、または Mootools の新しいバージョンで修正されているのかは不明です。

于 2015-06-22T16:44:45.607 に答える
3

window.onbeforeunload代わりに for window.onunloadfor chromeをお試しください。Chrome で動作する可能性のあるタグonbeforeunloadから呼び出すこともできます。body>

ただし、Chrome ブラウザのアンロード機能に問題があります。チェックしてください

ボディ/ウィンドウのアンロード イベントを介して呼び出された場合、location.href が chrome で機能しない

于 2011-11-16T05:31:10.787 に答える
3

に pagehide イベントを使用してみてくださいChrome and Safari

次のリンクを確認してください。

pageShow と pageHide のブラウザー サポートを検出する方法は?

http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

于 2012-03-28T14:39:29.050 に答える
2

これは機能します:

var unloadEvent = function (e) {
    var confirmationMessage = "Warning: Leaving this page will result in any unsaved data being lost. Are you sure you wish to continue?";
    (e || window.event).returnValue = confirmationMessage; //Gecko + IE
    return confirmationMessage; //Webkit, Safari, Chrome etc.
};
window.addEventListener("beforeunload", unloadEvent);
于 2016-03-07T05:04:50.373 に答える
2

onload イベントが発生しなかった場合、onunload イベントは発生しません。残念ながら、onload イベントはすべてのバイナリ コンテンツ(画像など) が読み込まれるのを待機し、onload イベントが発生する前にインライン スクリプトが実行されます。DOMContentLoadedは、onload が実行される前に、ページが表示されたときに発生します。そして、それはHTML 5 で標準になり、ブラウザーのサポートをテストできますが、これには<!DOCTYPE html>(少なくとも Chrome では)が必要であることに注意してください。ただし、DOM をアンロードするための対応するイベントが見つかりません。また、一部のブラウザーは「タブの復元」機能を実行するために DOM を保持している可能性があるため、このような仮想イベントは機能しない可能性があります。

これまでに見つけた唯一の潜在的な解決策はPage Visibility APIで、これには<!DOCTYPE html>.

于 2013-03-03T20:35:49.453 に答える