5

ユーザーがブラウザーのタブを閉じたときの状態を保存しようとしている Flash ゲームがあります。次のjqueryコードを使用しています:

//Called from Flash when window closes
function sendRequest(url, params) {
    $.ajax({
      type: "POST",
      async: false,
      url: url,
      data: params
    })
}

$(window).unload(function() {
  //Make Flash attempt to save the game when the window closes.
  //Flash gets the necessary data and calls sendRequest()
  document["flashGame"].saveBeforeUnload();
});
  • Firefox: 正常に動作します
  • Chrome:リロード時には正しく機能するが、タブを閉じたりブラウザを閉じたりすると機能しない
  • IE (すべてのバージョン): まったく動作しません

すべてのブラウザーで正しく動作するようにしたいのですが、最も重要なのは Chrome です (IE を使用しているユーザーは多くありません)。

Flash は正しく sendRequest を呼び出している (すべてのブラウザーで、アラートでテスト済み) ため、問題が Flash に起因するとは考えていませんが、そうである可能性があります。

4

2 に答える 2

6

短い答えは、できないということです。

onbeforeunloadイベントは、標準の確認ダイアログを許可するために Microsoft によって最初に導入されました。これは現在、ほとんどのブラウザーで元の形式でサポートされており、ほとんどの場合、短い非対話型関数の実行が許可されています (たとえば、状態を localStorage に記録することができます)。ただし、クロスブラウザー jQuery APIで説明されているように、これは信頼できません。

アンロード イベントの正確な処理は、ブラウザのバージョンごとに異なります。たとえば、Firefox の一部のバージョンでは、リンクがたどられたときにイベントがトリガーされますが、ウィンドウが閉じられたときにはトリガーされません。実際の使用では、サポートされているすべてのブラウザーで動作をテストし、独自の beforeunload イベントと対比する必要があります。

ユーザーがページ (およびスクリプト) を終了するように要求したときのタスクの実行に関連する多くの潜在的なセキュリティ上の問題があるため、正確に何ができるかを正確に正確にするための本格的な正規化の努力が行われるまで (そして行われる場合)、これはおそらく信頼できません。コールバックで行われonbeforeunloadます。

予測可能な将来のために、依存するのではonbeforeunloadなく、一定のバックグラウンド保存や大きな「保存」ボタンなど、他のスキームを使用することをお勧めします。

于 2012-09-13T08:47:52.990 に答える
1

試してみてくださいwindow.onbeforeunload。可能な解決策として、 jQueryBug Trackerでこれを見つけました。

window.onbeforeunload = function() { return "text"; }
于 2012-07-03T19:20:59.430 に答える