【问题标题】:How can I change the current URL?如何更改当前 URL?
【发布时间】:2011-04-20 07:16:16
【问题描述】:

我有以下代码可以从 JavaScript 中更改页面:

var newUrl = [some code to build up URL string];
window.location.replace(newUrl);

但它不会更改顶部 URL,因此当有人单击后退按钮时,它不会返回上一页。

如何让 JavaScript 也更改顶部 URL,以便浏览器后退按钮起作用。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      简单地分配给window.locationwindow.location.href 应该没问题:

      window.location = newUrl;
      

      但是,您的新 URL 会导致浏览器加载新页面,但听起来您想在不离开当前页面的情况下修改 URL。您有两种选择:

      1. 使用 URL 哈希。例如,您可以从example.com 转到example.com#foo,而无需加载新页面。您可以简单地设置window.location.hash 来简化此操作。然后,您应该监听 HTML5 hashchange 事件,该事件将在用户按下后退按钮时触发。旧版本的 IE 不支持此功能,但请查看 jQuery BBQ,它可以在所有浏览器中使用。

      2. 您可以使用 HTML5 History 修改路径而无需重新加载页面。这将允许您从example.com/foo 更改为example.com/bar。使用它很容易:

        window.history.pushState("example.com/foo");

        当用户按下“返回”时,您将收到窗口的popstate 事件,您可以轻松收听(jQuery):

        $(window).bind("popstate", function(e) { alert("location changed"); });

        不幸的是,这仅在非常现代的浏览器中受支持,例如 Chrome、Safari 和 Firefox 4 beta。

      【讨论】:

      • 字符串上的 .replace 方法不会改变它所应用的字符串,它会生成一个新字符串。” - window.location.replace() 方法不一样作为String.prototype.replace() 方法,因为window.location 不是字符串(它是一个对象)。window.location.replace() 用新的 URL 替换当前 URL,同时覆盖历史中旧 URL 的条目。
      • 感谢您的更正,我会相应地更新我的答案。
      • 回首过去,这是迄今为止最好的答案。 document.location.href 在 pushState 上没有任何内容
      【解决方案3】:

      如果你只是想更新相对路径,你也可以这样做

      window.location.pathname = '/relative-link'

      "http://domain.com" -> "http://domain.com/relative-link"

      【讨论】:

        【解决方案4】:

        嗯,我会用

        window.location = 'http://localhost/index.html#?options=go_here';
        

        我不确定这是否是您的意思。

        【讨论】:

          【解决方案5】:
          <script> 
              var url= "http://www.google.com"; 
              window.location = url; 
          </script> 
          

          【讨论】:

            【解决方案6】:

            这样就可以了:

            window.history.pushState(null,null,'https://www.google.com');
            

            【讨论】:

              猜你喜欢
              • 2012-02-10
              • 1970-01-01
              • 1970-01-01
              • 2018-02-04
              • 1970-01-01
              • 2019-06-29
              • 1970-01-01
              • 2018-11-15
              • 2019-02-24
              相关资源
              最近更新 更多