var timer;
function onPageBack() { alert("back to page"); }
window.addEventListener('pageshow', function() {
if (event.persisted)
onPageBack();
// avoid calling onPageBack twice if 'pageshow' event has been fired...
if (timer)
clearInterval(timer);
});
// when page is hidden, start timer that will fire when going back to the page...
window.addEventListener('pagehide', function() {
timer = setInterval(function() {
clearInterval(timer);
onPageBack();
}, 100);
});
7条答案
按热度按时间0vvn1miw1#
您可以检查
pageshow
事件的persisted
属性。在初始页面加载时,该属性设置为false。从缓存加载页面时,该属性设置为true。由于某些原因,jQuery在事件中没有这个属性,但是你可以从原始事件中找到它。
omqzjyyz2#
这可能是缓存问题。当你通过“后退”按钮返回页面时,页面会该高速缓存中被拉出来(行为取决于浏览器)。因此,你的JS不会触发,因为页面已经在缓存中呈现,重新运行你的js可能会对布局等有害。
您应该能够通过调整响应中的缓存头或使用一些浏览器技巧来克服这个问题。
以下是有关此问题的一些链接:
编辑
这些都是从上面的链接中拉出来的:
history.navigationMode = 'compatible';
<body onunload=""><!-- This does the trick -->
pageshow
和pagehide
的特殊事件。”$(document).ready(handler)
window.onunload = function(){};
nsc4cvqm3#
这里我们要做的是将
alert("back to page")
的返回值绑定为回调函数,这是行不通的,我们需要绑定一个函数:4xy9mtcn4#
我添加了同样的问题,iOS在返回时并不总是发布“pageshow”事件。
如果没有,safari会继续在页面上执行JS,所以我认为计时器会继续触发。
所以我想出了这个解决方案:
yr9zkbsy5#
我就这样解决了这个问题
gwo2fgha6#
你应该检查你的网页是有iFrame组件?我不知道为什么,但我删除iFrame组件来解决这个问题
sqyvllje7#
我让它在所有网络浏览器上工作的唯一方法是不允许缓存你返回的页面。使用JavaScript让它工作会很好,但我可以弄清楚。
我在我的
.asp
页面a helpful list of most options available to add the header.中添加了一个Cache-Control
标题。我的test.asp页面
要完成您的
请求,我建议您添加a tracking mechanism来跟踪点击。