Android是否支持window.location.replace或任何等效的?

时间:2013-03-04 01:53:23

标签: android mobile browser browser-history window.location

似乎Android浏览器无法正确实现window.location.replace

在大多数浏览器中,调用window.location.replace会将当前网址替换为传递给它的网址。

当用户导航到其他地方然后点击回来时,他们将返回到传递给window.location.replace的网址,而不是他们在调用window.location.replace之前所处的网址。

Android浏览器似乎没有正确实现这一点。

在Android浏览器中,用户将被定向回原始网址,而不是传递给window.location.replace的用户。

您可以自己测试here

那么有没有其他方法可以在Android中重写历史记录?或者,对于Android用户,我是否只能不使用该功能?

4 个答案:

答案 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);
      }