【发布时间】:2023-04-08 10:41:01
【问题描述】:
是否可以检查 history.go(-1) 是否有值?我知道你不能直接访问 history.previous。
我试图远离 document.referrer,因为我知道它在某些情况下可能会被阻止。
这就是我想要做的。我有一个错误页面,在这个页面上我想要一个返回按钮(如果它不是历史上唯一的项目)或一个关闭按钮(如果它是)。
【问题讨论】:
标签: javascript
是否可以检查 history.go(-1) 是否有值?我知道你不能直接访问 history.previous。
我试图远离 document.referrer,因为我知道它在某些情况下可能会被阻止。
这就是我想要做的。我有一个错误页面,在这个页面上我想要一个返回按钮(如果它不是历史上唯一的项目)或一个关闭按钮(如果它是)。
【问题讨论】:
标签: javascript
if (history.length) {
//There is history to go back to
history.go(-1);
}
【讨论】:
about:newtab ;)
history.length 不仅包括后页,还包括前页。因此,如果您打开浏览器选项卡,点击链接,单击“返回”,历史长度将大于零,而您无法再次返回。
没有跨浏览器的方法来实现这一点。即使不存在历史记录条目,也可以设置 Document.Referrer。
我想出了以下“hack”。它利用 onbeforeunload 事件来检测浏览器是否开始离开页面。如果它不在某个时间跨度内,它只会重定向到后备。
window.goBack = function goBack(fallback){
var useFallback = true;
window.onbeforeunload = function(){
useFallback = false;
}
window.history.back();
setTimeout(function(){
if (useFallback){ window.location.href = fallback; }
}, 100);
}
您可以使用goBack("fallback.example.org") 调用此函数。
其中一个用例是,您可能希望向任何页面添加后退按钮,并且还希望确保即使用户直接进入此页面(例如通过书签、直接链接等),此后退按钮也能正常工作.
所以它要么执行 history.back() 要么如果没有条目,它会重定向到回退。
【讨论】:
实际上,history.length 总是一个或多个,因为当前页面很重要。此外,如果您有前进历史记录(即您使用了后退按钮),这些页面也算在内。所以你需要一个更复杂的检查:
if( (1 < history.length) && document.referrer ) {
【讨论】:
target="_blank"链接,则通过Referrer,并且您不能在新标签中“返回”,因此该解决方案并不完美。
function test() {
document.URL = document.referrer;
}
【讨论】:
如果历史的长度大于 0,那么它至少包含一个历史点。
if (history.length)
【讨论】:
about:newtab 对吗?