Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript window.location.href、window.location.replace和window.location.assign之间的差异_Javascript_Dom_Location - Fatal编程技术网

Javascript window.location.href、window.location.replace和window.location.assign之间的差异

Javascript window.location.href、window.location.replace和window.location.assign之间的差异,javascript,dom,location,Javascript,Dom,Location,两者的区别是什么 window.location.href=”http://example.com"; window.location.replace(“http://example.com"); 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");
  • 我在许多论坛上读到,
    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>
    
    函数fnSetVariable(){
    //window.location.href=”http://example.com";
    window.location.replace(“http://example.com");
    //window.location.assign(“http://example.com");
    }
    
    它们做同样的事情:

    window.location.assign(url);
    window.location = url;
    window.location.href = url;
    
    他们只需导航到新的URL。另一方面,
    replace
    方法导航到URL,而不向历史记录添加新记录

    所以,你在那些论坛上读到的内容是不正确的。
    assign
    方法会将新记录添加到历史记录中


    参考资料:

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

    (据我所知,没有任何函数或参数组合可以更改或覆盖您在某些情况下并非绝对拥有的历史记录列表条目-浏览器通常通过甚至不定义任何可能影响页面历史记录列表中除顶部条目以外的任何条目的操作来实现这种安全限制。想到如果存在这样的功能,恶意软件可能会做一些卑鄙的事情。)


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

    上面的答案清楚地说明了
    位置。替换
    位置。href
    。但是,我想补充一个我在
    位置使用方面遇到的显著差异.在React中工作时分配
    位置。href

    在React中分析以下代码段:

    return (<>location.href = "www://example.com"</>)
    
    return(location.href=”www://example.com")
    
    Vs

    return(location.assign(“www://example.com)

    在fonmer的例子中,你会看到字符串www://example.com 在DOM上键入一秒钟,因为它会在重定向发生之前呈现文本


    为了避免这种情况,我们需要使用后者
    location.assign()

    您可以在url中看到一篇较旧的帖子:希望它会有帮助这里有一个更好的解释:非常感谢您的回答。它帮助我解决了浏览器后退按钮的问题。@Bunderboy:无论如何,这是压倒性的答案,所以这不会改变任何事情。
    assign()有什么意义
    ?从这个答案和文档中,它听起来与
    位置=…
    @Mitya IMHO
    assign()完全相同
    更好,为副作用调用函数更具可读性。您也可以轻松地模拟它进行测试。我想补充一点,Quttera实验室已将window.location.replace标记为可能可疑。“我知道的任何函数或参数组合都不能更改或覆盖历史记录列表条目”…欢迎使用HTML5 inabili更改或覆盖您不拥有的浏览器历史记录条目是一项长期存在的安全规则。HTML5只是延续了这一规则。您没有抓住要点,或者只是讽刺。请查阅HTML5和历史记录