这是另一种方法。我们可以添加简短的 SessionStorage 条件,而不是仅仅试图避免返回按钮功能(不能可靠地工作)。
假设我们有三个不同的页面(page1、page2 和 page3)。在每一页上,我们都有一个链接可以点击进入下一个页面,我们不希望用户能够返回到上一页。
在第一页 (page1.html) 上,我们创建一个带有虚拟“prev”代码的 SI(sessionStorage Item)和另一个带有“page1”代码(SI “now”)的 SI:
PAGE 1 <button onclick="goto()">PAGE 2</button>
-------------------
let thispage = '1' // Or 123456 if preferred or make sense
// You can replace this fixed 'thispage' value on each page with a script counting the clicks
// or any other way to increase its value, i.e., thispage++
// or what you want, even counting the url.length (lol)
sessionStorage.setItem('prev', '0') // Dummy code
sessionStorage.setItem('now', thispage)
// You can here make this page unreachable with page2/page3 SI same conditions
function goto(){
window.location = "page2.html"
}
在 page2.html 上,我们使用通常的 NoBack 脚本(如果它有效),并且仅当我们来自 page1 时才更新 SI:
PAGE 2 <button onclick="goto()">PAGE 3</button>
-------------------
// If it works, let it work :-)
history.pushState(null, null, location.href);
history.back();
history.forward();
window.onpopstate = function () {
history.go(1);
};
// else
let thispage = '2' // 456789
let thisprev = sessionStorage.getItem('now')
if(sessionStorage.getItem('prev')==thispage) {
console.log('USER is back on PAGE 2')
setTimeout(function() { goto() }, 1000); // Remove log + setTimeout
}
if(thisprev !== thispage) {
if(thisprev < thispage) {
console.log('USER is coming from PAGE 1')
sessionStorage.setItem('prev', thisprev)
sessionStorage.setItem('now', thispage)
}
else {
console.log('USER try to reload this page')
setTimeout(function() { goto() }, 1000);
}
}
function goto(){
window.location = "page3.html"
}
在 page3.html 上:
PAGE 3 <button onclick="goto()">BACK TO PAGE 1</button>
-------------------
history.pushState(null, null, location.href);
history.back();
history.forward();
window.onpopstate = function () {
history.go(1);
};
let thispage = '3' // 999999
let thisprev = sessionStorage.getItem('now')
if(sessionStorage.getItem('prev') == thispage) {
goto()
}
if(thisprev !== thispage) {
if(thisprev < thispage) {
sessionStorage.setItem('prev', thisprev)
sessionStorage.setItem('now', thispage)
}
else {
goto()
}
}
function goto(){
window.location = "page1.html" // Reinit test
}
优点是即使用户手动重新加载前一页(如果他有时间查看并记住 URL)它仍然有效。它并未在所有设备上进行测试,但似乎在 Firefox + Chrome + Edge Windows 10 和 Firefox + Chrome 在 OS X 上运行良好。