如何进行跨浏览器的窗口卸载请求?
我有一个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"; }