繁体   English   中英

iPad Safari上的onpagehide事件

[英]onpagehide event on iPad Safari

由于iPad Safari上的onunload和onbeforeunload事件存在一些问题,我发现iPad(页面隐藏)的等效问题如上所列;

http://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

现在我的问题是; 1. Pagehide是否等于卸载OR beforeload事件? 2.我在这个pagehide事件处理程序中使用DWR调用(简单来说,它是一个AJAX调用);

someObj.saveData(jsonString,{async:false});

这里saveData()实际上是一个Java函数,它可以保存数据..现在请...我明白,在卸载事件中保存数据是一个“不良实践”......但这已被编码存在于我的应用程序,我不能改变它..

所以我的问题是它的确如何表现......就像在页面被卸载时它会继续在后台运行一样,如果是页面隐藏,它会在什么时候被调用?

在销毁活动页面时触发beforeunloadunload ,因为它被导航离开,或者因为浏览器正在关闭。

当活动页面“挂起”到例如磁盘时会触发pagehide

如果在页面暂停时关闭浏览器,则可能永远不会收到beforeunloadunload事件。

引入了pagehide ,因为浏览器制造商试图暂停和恢复页面缓存(而不是重新加载它们),但发现当他们调用unload事件时,许多页面会采取破坏性操作,以防止页面稍后恢复。 于是,他们想出了pagehide的相似,但不同的选择。

我明白在卸载事件中保存数据是一个“不良做法”

我不确定...在unload发出同步请求是一种不好的做法,因为它会让浏览器在用户试图关闭窗口时等待响应......但我认为发送 -并且 - 忘记异步保存请求将没有问题。

所以我的问题是它的确如何表现......就像在页面被卸载时它会继续在后台运行一样,如果是页面隐藏,它会在什么时候被调用?

beforeunloadunload调用的Javascript代码通常是在关闭之前将在页面上运行的脚本的最后一个片段。 这就是为什么,如果您需要服务器的答案,同步请求是您唯一的选择(否则永远不会处理响应)。 事件完成后,页面将被销毁。 pagehide事件是类似的,除了页面不会被销毁,而是它将被序列化并保存在某个地方,因此可以在以后加载和恢复。

pagehide ,您不应该在pagehide事件中执行任何“清理”逻辑,例如销毁对象等。

在WebKit团队构建页面 pagehide事件时,可以在此博客文章中找到更多详细信息: WebKit Page Cache II - 卸载事件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM