似乎Android浏览器无法正确实现window.location.replace
。
在大多数浏览器中,调用window.location.replace
会将当前网址替换为传递给它的网址。
当用户导航到其他地方然后点击回来时,他们将返回到传递给window.location.replace
的网址,而不是他们在调用window.location.replace
之前所处的网址。
Android浏览器似乎没有正确实现这一点。
在Android浏览器中,用户将被定向回原始网址,而不是传递给window.location.replace
的用户。
您可以自己测试here。
那么有没有其他方法可以在Android中重写历史记录?或者,对于Android用户,我是否只能不使用该功能?
答案 0 :(得分:2)
我遇到了同样的问题并最终得到了类似于chris建议的代码,但我更改了if语句以使用modernizr的特征检测。 如果您不使用modernizr,代码将如下所示:
if(!!(window.history && history.replaceState)){
window.history.replaceState({}, document.title, base + fragment);
} else {
location.replace(base + fragment);
}
除非您有特定的设备检测原因,否则首选功能检测是首选,因为它基本上支持所有设备,甚至是未来的设备。
答案 1 :(得分:1)
要使其在所有/大多数移动平台上运行,请查看此link。
显示如何处理Android,iPad和iPhone的重定向。
Android使用document.location
,而iOS支持window.location.replace
答案 2 :(得分:0)
这会有用吗?
document.location.href = 'http://example.com/somePage.html';
答案 3 :(得分:0)
您可以尝试在历史记录窗口中使用replaceState方法.history
if (((navigator.userAgent.toLowerCase().indexOf('mozilla/5.0') > -1 && navigator.userAgent.toLowerCase().indexOf('android ') > -1 && navigator.userAgent.toLowerCase().indexOf('applewebkit') > -1) && !(navigator.userAgent.toLowerCase().indexOf('chrome') > -1))) {
window.history.replaceState({}, document.title, base + fragment);
} else {
location.replace(base + fragment);
}