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

mil*_*211 107 javascript location dom

有什么区别

  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>
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 150

这些做同样的事情:

window.location.assign(url);
window.location = url;
window.location.href = url;
Run Code Online (Sandbox Code Playgroud)

他们只需导航到新的URL.replace另一方面,该方法导航到URL而不向历史添加新记录.

所以,你用这么多形式阅读的内容是不正确的.该assign方法会向历史记录添加新记录.

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

  • @Mitya IMHO `assign()` 更好,调用函数以获得副作用更具可读性。您也可以轻松地模拟它进行测试。 (2认同)

Chu*_*ars 10

关于无法使用"后退"按钮的部分是一种常见的误解.window.location.replace(URL)通过使用新条目覆盖页面历史记录列表中的顶部 ONE条目,因此用户无法轻松返回到该特定网页.该功能不会消除整个页面历史记录列表,也不会使"后退"按钮完全无法正常工作.

(我知道的NO函数或参数组合可以更改或覆盖您绝对不会完全拥有的历史列表条目- 浏览器通常甚至不会定义任何可能影响除在顶部一个在页面历史列表.我不敢去想什么样的卑鄙的事情,如果这样的功能存在的恶意软件可能会做.)

如果你真的想让后退按钮不起作用(可能不是"用户友好":再想一想,如果这真的是你想做的事情),"打开"一个全新的窗口.(你可以"打开"一个甚至没有 "后退"按钮的弹出窗口......但是弹出窗口现在不是很受欢迎:-)如果你想让你的页面显示无论用户做什么(再次"用户友好性"是有问题的),设置一个window.onunload处理程序,每次重新加载您的页面从一开始就清楚.

  • 无法更改或覆盖您不拥有的浏览器历史记录条目是一个已经存在___的时间的安全规则.HTML5只是继续该规则. (6认同)
  • *'我知道的NO函数或参数组合可以更改或覆盖历史列表条目'*...欢迎使用HTML5 (4认同)