更新URL没有明显的重新加载


Updating URL without apparent reloading

我正在构建一个网页,其中有一种目录,它显示了当前项目及其描述,以及它下面其他项目的缩略图,如果我点击不同项目的缩略图,我有一些脚本来更改描述和大图到所需的项目。问题是,我希望这反映在URL,以便用户可以发送URL作为链接到其他显示所需的项目。但是我还没有找到一种不用重新加载页面就能更改URL的方法,而且出于美观考虑,我不想重新加载页面。有什么办法吗?

解决方案是使用location.hash。此外,要正确实现它,您可能需要阅读来自Google的这篇文章:使AJAX应用程序可爬行

没有可靠的(跨浏览器)方法来改变地址栏中的URL而不重新加载页面-更改window.location.href的行为(我想象这是你试图做的)告诉浏览器重新加载页面(甚至window.location.href = window.location.href;将在某些浏览器中这样做)。

我认为你必须在页面上放一个[链接到此页]元素,并改变它-你可以很容易地填充它与当前的URL要么在服务器端或使用window.onload函数和操作它在相同的方式,你一直在做使用element.valueelement.innerHTML(取决于什么类型的元素你选择包含链接)。

您可以使用散列(参见window.location.hash属性),但这在编程上可能会很混乱。

通常的,目前广泛兼容的方法是使用散列,例如:

http://myniftystore.com/catalog#11321R-red-shirt

然后

http://myniftystore.com/catalog#11321B-blue-shirt

然后

http://myniftystore.com/catalog#95748B-blue-slacks

…当你浏览项目时。您可以通过分配location.hash属性来更改页面上的哈希值,而无需重新加载。这要求您首先使用一些客户端脚本来确定当用户第一次访问URL时要显示什么(通过检查location.hash)。

谷歌已经提出了一个如何使这些东西可抓取的建议。就我个人而言,我认为他们要求这个奇怪的标签(#!xyz而不仅仅是#xyz)真的把事情搞砸了,但如果是我或谷歌,我想我知道谁会赢。: -)

即将发布的是完整的历史API,但支持还不是很到位(特别是没有 —咳嗽,本;