【发布时间】:2015-02-27 19:44:39
【问题描述】:
我有一个网站,如果用户导航到某个页面,那么他会根据页面上的某些条件收到对话框通知。用户可以从这个页面导航到其他页面,当然也可以按这些页面上的后退按钮来导航回到这个页面。
我想检测用户是否通过后退按钮到达此页面,因此不会再次显示对话框通知(因为用户已经看到它)。
有没有办法可靠地检测到这一点?
【问题讨论】:
标签: javascript navigation cross-browser back-button
我有一个网站,如果用户导航到某个页面,那么他会根据页面上的某些条件收到对话框通知。用户可以从这个页面导航到其他页面,当然也可以按这些页面上的后退按钮来导航回到这个页面。
我想检测用户是否通过后退按钮到达此页面,因此不会再次显示对话框通知(因为用户已经看到它)。
有没有办法可靠地检测到这一点?
【问题讨论】:
标签: javascript navigation cross-browser back-button
你最好的可能是window.onpageshow = function(){};
窗口上的页面显示事件的事件处理程序属性。
window.onpageshow = function(event) {
if (event.persisted) {
alert("From back / forward cache.");
}
};
【讨论】:
输入技巧不再有效。这是我使用的解决方案:
if (window.performance && window.performance.navigation.type === window.performance.navigation.TYPE_BACK_FORWARD) {
alert('Got here using the browser "Back" or "Forward" button.');
}
最好的(虽然不是非常可靠)的方法是使用 Javascript 历史对象。您可以查看 history.previous 页面,看看它是否是该系列的下一个。不是一个很好的解决方案,但也许是解决这个问题的唯一方法。
【讨论】:
我喜欢在输入字段中使用一个值:-
<input type="hidden" id="fromHistory" value="" />
<script type="text/javascript">
if (document.getElementById('fromHistory').value == '') {
document.getElementById('fromHistory').value = 'fromHistory');
alert('Arrived here normally');
} else {
console.log('Arrived here from history, e.g. back or forward button');
}
</script>
这是可行的,因为如果浏览器从历史记录导航回该字段,则会使用 javascript 放入该字段的值重新填充该字段的值 :-)
【讨论】: