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

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

简短的回答是,你做不到。

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

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

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

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

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

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