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

2022-08-30 02:22:18

两者之间有什么区别

  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

它们做同样的事情:

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

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

因此,您在这些论坛上阅读的内容是不正确的。该方法会将新记录添加到历史记录中。assign

参考资料: https://developer.mozilla.org/en-US/docs/Web/API/Window/location


答案 2

关于无法使用“后退”按钮的部分是一个常见的误解。window.location.replace(URL) 通过用新条目覆盖它,从页面历史记录列表中抛出顶部的一个条目,因此用户无法轻松地返回到该特定网页。该函数不会清除整个页面历史记录列表,也不会使“后退”按钮完全不起作用。

(据我所知,没有任何函数或参数组合可以更改或覆盖绝对不拥有的历史记录列表条目 - 浏览器通常通过简单地定义任何可能影响页面历史记录列表中顶部条目的操作来施加此安全限制。我不寒而栗地想到,如果存在这样的功能,恶意软件可能会做什么样的卑鄙事情。

如果你真的想让“后退”按钮不起作用(可能不是“用户友好”的:如果这真的是你想做的,请再想一想),“打开”一个全新的窗口。(您可以“打开”一个甚至没有“后退”按钮的弹出窗口...但弹出窗口现在不是很受欢迎:-)如果你想让页面无论用户做什么都保持显示(再次“用户友好性”是值得怀疑的),请设置一个 window.onunload 处理程序,每次都从头开始重新加载你的页面。