web-dev-qa-db-ja.com

ダイアログなしでonbeforeunloadを使用していますか?

ユーザーがページを離れたときにデータを投稿しようとしています。ようやく実用的な解決策を見つけましたが、ユーザーが去ったときに確認ダイアログが表示されます。私が試してみました return null;が機能しませんでした。ダイアログを無効にすることは可能ですか?

window.onbeforeunload = function() {
    $.post("track.php", {
        async: false,
        refid: refid,
        country: country, 
        type: type,
    });

    return '';
}
21
user198989

Mozilla Developer Networkページ から:

このイベントが非void値を返すと、ユーザーはページのアンロードを確認するよう求められます。

これは、確認プロンプトのトリガーを回避するために、ハンドラーの戻り値がundefined''false、またはnullではない)である必要があることを意味します。

window.onbeforeunload = function() {

  $.post("track.php", {
  ...
  });

  return undefined;
}

JavaScriptでは、戻り値をまったくスキップして同じ結果を得ることができます。

Jqueryを使ったコーヒースクリプトでは、それは次のようなものです

$(document).ready ->
  $(window).bind('beforeunload', ->
    #put your cleanup code here
    undefined
  )
42
meesern

ダイアログを無効にしたい場合は、

window.onbeforeunload = function() { ... return; }

の代わりに

window.onbeforeunload = function() { ... return ''; }

お役に立てば幸いです。

5
Hay Thi

これをテストしてください:

$(window).on('beforeunload', function (e) {
    if (e.originalEvent) $.post("track.php", {
        async: false,
        refid: refid,
        country: country,
        type: type,
    });
    else $.get("", {
        async: false
    });
    $(this).trigger('beforeunload');
}

これは多くの役に立たないリクエストを作成しますが、最初のリクエストがサーバーに到達するのに十分な時間を与えるはずです。

2
A. Wolff

私はこれを使用して動作させる本当に簡単なトリックを見つけました

$(window).bind('onbeforeunload', function () {

$.post("track.php", {
async: false,
refid: refid,
country: country, 
type: type,
});

});
0
user198989