我有一个网站,如果用户浏览到某个页面,则根据该页面上的某些条件,会弹出对话框通知。 用户可以从此页面导航到其他页面,当然也可以在这些页面上按下后退按钮以返回此页面。
我想检测用户是否通过后退按钮到达此页面,以便不再显示对话框通知(因为用户已经看过它)。
有可靠的方法来检测这一点吗?
我想检测用户是否通过后退按钮到达此页面,以便不再显示对话框通知(因为用户已经看过它)。
有可靠的方法来检测这一点吗?
你最好的选择可能是 window.onpageshow = function(){};
一个用于窗口pageshow事件的事件处理程序属性。
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.');
}
我喜欢使用输入框中的值来实现这个:
<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历史对象。您可以查看history.previous page以查看它是否是系列中的下一个页面。这不是一个很好的解决方案,但也许是找出答案的唯一方法。
if (window.performance) {
var navEntries = window.performance.getEntriesByType('navigation');
if (navEntries.length > 0 && navEntries[0].type === 'back_forward') {
console.log('this page is load from back/forward');
} else {
console.log('This is normal page load');
}
} else {
console.log("browser doesn't support this API");
}
还有一个已弃用的API,可以检测返回按钮:
if (window.performance) {
if (window.performance.navigation
&& window.performance.navigation.type == window.performance.navigation.TYPE_BACK_FORWARD) {
console.log('this page is load from back/forward');
} else {
console.log('This is normal page load');
}
} else {
console.log("browser doesn't support this API");
}