web-dev-qa-db-ja.com

window.onunloadがChromeブラウザで正常に動作していません。誰か助けてもらえますか?

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

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

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

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

31
Imran

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

しかし、何が可能か(知る限り):

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

#2の例:

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

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

54
Armin

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

window.onbeforeunload = function () {
  myFunction();
};
6
Carlos

アーミンの答えはとても便利です、ありがとう。 #2は、ほとんどのブラウザで機能するアンロードイベントを設定する際に知っておくべき最も重要なことです。alert()またはconfirm()はできませんが、文字列を返すと、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の以降のバージョンで修正されているのかはわかりません。

5
Tracy

Chrome and Safariに対してpagehideイベントを使用しようとする場合があります。

これらのリンクを確認してください:

pageShowおよびpageHideのブラウザサポートを検出する方法

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

3

クロムのwindow.onunloadの代わりにwindow.onbeforeunloadを試してください。また、body>タグからonbeforeunloadを呼び出すこともできます。クロム。

ただし、chromeブラウザのアンロード機能に問題があります。確認してください。

location.hrefはchrome body/window unloadイベントを介して呼び出されたとき)では機能しません

ありがとう、Nived

3
Nivedittan

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

私がこれまでに見つけた唯一の解決策は Page Visibility API で、これには<!DOCTYPE html>

1

これは動作します:

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);
1
Amulya Kashyap