有没有办法来改变浏览器的地址栏而无需刷新页面?有没有办法来改变浏览器的地址栏而无需刷新页面?(Is

2019-05-11 15:20发布

我正在开发一个web应用程序。 在这里面我有一个名为类部分,每次用户点击其中一个类别的更新面板加载相应的内容。

用户点击该类别后我想在浏览器的地址栏中的URL,从改变

www.mysite.com/products 

喜欢的东西

www.mysite.com/products/{selectedCat} 

而无需刷新页面。
是否有某种的JavaScript API的,我可以用它来实现这一目标?

Answer 1:

随着HTML5可以修改URL无需重新加载:

如果你想在浏览器的历史一个新的职位(即后退按钮将工作)

window.history.pushState('Object', 'Title', '/new-url');

如果你只是想改变URL,而不能回去

window.history.replaceState('Object', 'Title', '/another-new-url');

该对象可以被用于导航AJAX:

window.history.pushState({ id: 35 }, 'Viewing item #35', '/item/35');

window.onpopstate = function (e) {
  var id = e.state.id;
  load_item(id);
};

在这里阅读更多: http://www.w3.org/TR/html5-author/history.html

一个后备sollution: https://github.com/browserstate/history.js



Answer 2:

要添加到什么家伙已经说过编辑window.location.hash属性来匹配您的onclick功能,你想要的网址。

window.location.hash = 'category-name'; // address bar would become http://example.com/#category-name


Answer 3:

我相信直接操纵地址栏到一个完全不同的URL没有移动到该网址是不允许出于安全原因,如果你喜欢它是

www.mysite.com/products/#{selectedCat}

即在同一页内的锚链接风格再看看到各种历史/“返回”按钮的脚本,现在存在于大多数JavaScript库。

更新面板的提及使我使用的是asp.net,在这种情况下,asp.net AJAX历史控制是一个良好的开端猜测



Answer 4:

我不认为这是可能的(至少改变一个完全不同的地址),因为这将是对地址栏的直观误用,并能促进网络钓鱼攻击。



Answer 5:

这不能做你说的方式。 通过somej.net建议的方法是你可以得到的最接近。 它实际上是在AJAX年龄非常普遍的做法。 即使Gmail使用此。



Answer 6:

“window.location.hash”

通过sanchothefat的建议应该是唯一这样做的方式。 因为我已经看到了这个功能的所有地方,它是在#后的URL所有的时间。



文章来源: Is there a way to change the browser's address bar without refreshing the page?