如何防止在使用移动Safari浏览器时从缓存中重新加载网页?
Mobile Safari使用特殊的缓存机制Page Cache
(这里),它基本上保持当前页面处于活动状态,但当我们导航到另一个页面时处于休眠状态。 这样,当用户按下back
按钮时,它可以立即以最新状态显示前一页。
这对导航和浏览网页很有用,但是对于特殊情况,这会变得令人讨厌,因为每次用户导航到该页面时都需要获取新的页面副本。 (在我的情况下,我不得不页:登录和主页)。
我完全知道,没有任何东西阻止用户打开同一应用程序的多个选项卡。 我不关心这一点。
用于阻止页面被缓存的跨浏览器解决方案并不能解决问题,因为Safari会将页面保持打开状态,但不可见并被暂停。
window.onpageshow和处理event.persisted
没有帮助,因为第二次浏览器由于某些原因(当您按back
按钮时)不会执行onpageshow
事件。
注意那些不知道onpageshow
事件是关于什么的onpageshow
:Apple不鼓励使用load
和unload
事件,因为使用页面缓存的概念,这些事件没有明确的意义。 因此, onpageshow
应该做我们期望的load
事件。
另一个可能的解决方案是查看event.persisted
标志以确定它是否被缓存:
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload()
}
};
当用户按下后退按钮时,您将收到与以前相同的文档(旧页面被暂停)。 因此,如果您处理onpagehide
事件并在导航到新页面之前对页面进行一些修改,则您的更改将保留在那里。
我尝试添加一个脚本块到body
只是浏览之前:
if (isSafari) {
window.addEventListener('pagehide', function(e) {
var $body = $(document.body);
$body.children().remove();
$body.append("<script type='text/javascript'>window.location.reload();</script>");
});
}
这是行不通的,因为当用户返回到页面时,脚本立即执行我的意图执行的地方。
但如果您在离开pagehide
回调后推迟DOM修改(如下所示):
if (isSafari) {
window.addEventListener('pagehide', function(e) {
var $body = $(document.body);
$body.children().remove();
// wait for this callback to finish executing and then...
setTimeout(function() {
$body.append("<script type='text/javascript'>window.location.reload();</script>");
});
});
}
TADA它的作品! 只要用户按下后一页上的按钮,Safari就会加载暂停的页面并执行此前未执行过的这个新的脚本块。
链接地址: http://www.djcxy.com/p/55727.html上一篇: How to prevent reloading of web page from cache while using mobile safari browser?