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();
});
  • 火狐:正常工作
  • 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 回答