与标题一样,如果调用onstatechange
函数而不是pushState
函数,我希望能够执行不同的back
事件。或者,如果go
函数为负数或正数。
示例:
如果调用History.pushState()
或History.go(1)
,我希望statechange
事件的回调为forwardPushState
如果调用History.back()
或History.go(-1)
,我希望statechange
事件的回调为backwardsPushState
答案 0 :(得分:6)
状态是与页面相关的一些数据(用户在浏览器中看到它)。如果用户想要进入某个页面,那么这个页面是相同的,无论是他来自后退按钮点击还是来自前进按钮点击,我认为。
PushState在堆栈中推送新状态。它与back
和go
没有任何关系。 Back
和go
是用于在堆栈中的推送状态上导航的函数。我这样说是因为在你的编辑中,看起来你认为pushState和go(1)是等价的。
也许如果您想知道用户来自哪个方向,您应该分析onstatechange
事件以了解它是否需要存储方向的任何参数。我还是不知道该怎么做。
我认为主要的是它与go (-1)
或go(1)
或back
没有任何关系。
答案 1 :(得分:-1)
也许这对你有用。
<html>
<body onunload="disableBackButton()">
<h1>You should not come back to this page</h1>
</body>
<script>
function disableBackButton()
{
window.history.forward();
}
setTimeout("disableBackButton()", 0);
</script>
</html>
上面的代码将难以使用后退按钮加载此页面。
第二次尝试
以下代码来自另一个堆栈溢出。
detect back button click in browser
window.onload = function () {
if (typeof history.pushState === "function") {
history.pushState("jibberish", null, null);
window.onpopstate = function () {
history.pushState('newjibberish', null, null);
// Handle the back (or forward) buttons here
// Will NOT handle refresh, use onbeforeunload for this.
};
}
else {
var ignoreHashChange = true;
window.onhashchange = function () {
if (!ignoreHashChange) {
ignoreHashChange = true;
window.location.hash = Math.random();
// Detect and redirect change here
// Works in older FF and IE9
// * it does mess with your hash symbol (anchor?) pound sign
// delimiter on the end of the URL
}
else {
ignoreHashChange = false;
}
};
}
}