我正在使用一个简单的.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页面之前的页面。
答案 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();
}
});