如果window.history.back不可能重定向页面

时间:2015-04-28 10:03:34

标签: javascript redirect browser

我一直在使用浏览器历史记录来返回页面。但是,由于JS无法可靠地读取用户历史记录,因此当没有历史记录时,我无法知道我的按钮不再有效。

如果背面失败,我尝试使用这些行中的某些内容来重定向页面:

window.history.back();
setTimeout(function () { window.location.href = "http://www.stackoverflow.com"; }, 500); 

然而,这完全依赖于任意时间段,这对于所有用户来说可能会或可能不会起作用(并且设置得足够高以保证它对每个人都有效会为大多数人提供一种非常缓慢的体验)

在评论中建议我现在也尝试使用这些方面的各种尝试:

if (!window.history.back()) { 
    window.location.href = "http://www.stackoverflow.com";
}

然而window.history.back()将始终返回false,无论该功能是否成功。我认为这是浏览器内置的安全功能。

有没有人知道如何检测失败的页面更改,或者以更优雅的方式解决此问题?

1 个答案:

答案 0 :(得分:1)

我最终得到了一个相对有用的(如果有点hacky)解决方案:

// On page load
if (history.length <= 1) { 
    /* 
    *  This will only execute the first time the page (with absolutely no browser
    *  history, including browser splash screens that may add to the history) 
    *  is loaded, it wont happen if you navigate back to the page
    *  so store the current page in local storage
    */
    localStorage.setItem("root", document.location);
}
// Then execute some code only on the root
if (localStorage.getItem("root") == document.location) {
    // Your code
}

一些潜在的问题:

  • 如果您需要同时打开此类型的多个页面,它将会中断,因为加载的页面的第一个实例将检查第二个实例的根目录(除非您将本地存储名称自定义为该组页面)< / LI>
  • 需要local storage which doesn't work on some of the (really) old browsers
  • 这仅适用于浏览器历史记录的网页,通常只有在新标签页中打开页面或单击外部应用程序/桌面中的链接时才会出现这种情况。大多数浏览器都包含一个启动画面/主页,它将添加到浏览器历史记录中。