如何进行跨浏览器的窗口卸载请求?

时间:2012-07-03 19:11:09

标签: javascript jquery flash onbeforeunload

我有一个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,但它可能会。

2 个答案:

答案 0 :(得分:6)

简短的回答是,你不能。

最初由Microsoft引入onbeforeunload事件以允许标准确认对话框。大多数浏览器现在支持原始形式,并且在大多数情况下允许执行简短的非交互式功能(例如,您可以在localStorage中记录您的状态)。但是,如the cross-browser jQuery API所述,这是不可靠的:

  

unload事件的确切处理因版本而异   浏览器版本。例如,某些版本的Firefox触发了   跟踪链接时的事件,但窗口关闭时不响应。在   在实际使用中,应该在所有支持的浏览器上测试行为,   与专有的前载事件形成​​鲜明对比。

由于当用户要求结束页面(以及脚本)时,有许多与执行任务相关的潜在安全问题,这可能是不可靠的,直到(以及如果)对精确进行严格的标准化工作在onbeforeunload回调中究竟可以做些什么。

对于可预测的未来,建议不要依赖onbeforeunload,而是使用其他方案,例如恒定背景保存或大“保存”按钮。

答案 1 :(得分:1)

试试window.onbeforeunload。我在jQueryBug Tracker中找到了这个可能的解决方案:

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