如果存在Cookie,则JS重定向

时间:2019-02-06 14:54:46

标签: javascript

我正在使用一个简单的.html页面将某人没有cookie重定向到页面A。如果他们有cookie,我想将其发送到B页。

我遇到的问题是某人将被重定向到页面A,但是当他们按下页面A上的后退按钮时,.js不在我简单的.html页面上执行,而是将其发送到页面B。 ,空白的.html页面正在加载。

//this function fixed Safari
window.onpageshow = function(event) {
  if (event.persisted) {
    window.location.reload()
  }
};
window.onunload = function() {}; // this seems to have fixed Firefox
setTimeout(function() {
    if (document.cookie.indexOf("visitedinhour=") >= 0) {
        // They've been here before.
        window.location = 'https://www.google.com';
    } else {
        // set a new cookie
        document.cookie = "visitedinhour=true; max-age=" + 3600;
        window.location = 'https://www.bing.com';
    }
}, 200);

我想发生的是有人访问我的.html页面,重定向到页面A,然后单击“后退”按钮,然后重定向到页面B。

更新:Firefox似乎可以正常工作。 Chrome和Safari没有。 Chrome浏览器返回到我的.html页面之前的页面,而Safari仍会加载空白的.html页面。

更新2: Safari是固定的; Chrome无法正常运行。在Bing.com上并单击“后退”按钮时,浏览器将转到包含此代码的.html页面之前的页面。

1 个答案:

答案 0 :(得分:0)

这可能是Firefox中的一个已知问题。

尝试设置要在window.onunload上调用的空函数:

window.onunload = function() { };

这是因为Firefox(以及Safari和Opera)使网站保持完整。它不会立即破坏您的页面以转到下一页,从而为用户提供了更快,更流畅的后退/前进页面转换。

更新

这应该适用于Safari(从bfcache加载页面时将强制重新加载):

window.onpageshow = function(event) {
  if (event.persisted) {
    window.location.reload()
  }
};

更新2:

此代码应与所有浏览器兼容,尽管您可能也需要使用上述代码段。

window.addEventListener("pageshow", function (event) {
  var historyTraversal = 
        event.persisted || 
        (
          // Check if performance not undefined (restored from cache)
          typeof window.performance != "undefined" &&
          
          // Check if the back button was used
          window.performance.navigation.type === 2
        );
  
  if (historyTraversal) {
    // Handle page restore and reload the page
    window.location.reload();
  }
});