window.location.href,window.location.replace和window.location.assign之间的区别


128

之间有什么区别

  1. window.location.href="http://example.com";
  2. window.location.replace("http://example.com");
  3. window.location.assign("http://example.com");

我在许多论坛上阅读过,它们window.location.assign()仅替换当前的会话历史记录,因此浏览器的后退按钮将不起作用。但是,我无法重现此内容。

function fnSetVariable() {
    //window.location.href = "http://example.com";
    window.location.replace("http://example.com");
    //window.location.assign("http://example.com");
}

<a onmouseover="fnSetVariable();" 
   href="PageCachingByParam.aspx?id=12" >
   CLICK 
</a>

1
您可以在url中看到一个较旧的帖子:stackoverflow.com/questions/1865837/…希望它会有所帮助

Answers:


165

这些做同样的事情:

window.location.assign(url);
window.location = url;
window.location.href = url;

他们只是导航到新的URL。replace另一方面,该方法可导航到URL,而无需在历史记录中添加新记录。

因此,您以多种形式阅读的内容是不正确的。该assign方法确实将新记录添加到历史记录中。

参考:http : //developer.mozilla.org/en/window.location


1
非常感谢您的回答。它对解决浏览器后退按钮问题很有帮助。
santosh kumar patro

@blunderboy:不管怎么说,这是最重要的答案,所以这不会改变任何事情。
BoltClock

那有什么意义assign()呢?根据这个答案和文档,听起来与相同location = ...
Mitya

11

关于无法使用“后退”按钮的部分是常见的误解。window.location.replace(URL)通过用新条目覆盖页面历史记录列表而将其排在首位,从而使用户无法轻松地返回到该特定网页。该功能不会清除整个页面历史记录列表,也不会使“后退”按钮完全不起作用。

(我所知道的任何功能或参数组合都不能更改或覆盖绝对并非绝对拥有的历史记录列表条目-浏览器通常根本不定义任何可能影响除以下各项之外的任何条目的操作来实现此安全限制:在顶部一个在页面历史列表。我不敢去想什么样的卑鄙的事情恶意软件可能会做,如果这样的功能存在。)

如果您确实想使“后退”按钮不起作用(可能不是“用户友好”:如果真的要这样做,请再考虑一下),“打开”一个全新的窗口。(您也可以“打开”一个甚至没有 “后退”按钮的弹出式窗口,但是现在弹出式窗口并不流行:-)如果您希望无论用户做什么都保持页面显示(再次说明“用户友好性”是有问题的),设置一个window.onunload处理程序,每次从头开始就重新加载您的页面。


4
“我所知的任何功能或参数组合都无法更改或覆盖历史记录列表条目” ...欢迎使用HTML5
SpYk3HH 2014年

6
无法更改或覆盖您不拥有的浏览器历史记录条目是一项已存在很长时间的安全规则。HTML5只是继续遵守该规则。
Chuck Kollars 2014年

您宁愿错过重点或嘲讽。查找html5和历史记录
SpYk3HH 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.