有没有一种方法可以在不重新加载页面的情况下修改当前页面的URL?
如果可能,我想访问#哈希之前的部分。
我只需要更改域之后的部分,所以我不会违反跨域策略。
window.location.href = "www.mysite.com/page2.php"; // this reloads
有没有一种方法可以在不重新加载页面的情况下修改当前页面的URL?
如果可能,我想访问#哈希之前的部分。
我只需要更改域之后的部分,所以我不会违反跨域策略。
window.location.href = "www.mysite.com/page2.php"; // this reloads
当前回答
可以添加定位标记。我在我的网站上使用这个,这样我就可以通过Google Analytics跟踪人们在页面上访问的内容。
我只是添加了一个锚标记,然后添加了我要跟踪的页面部分:
var trackCode = "/#" + urlencode($("myDiv").text());
window.location.href = "http://www.piano-chords.net" + trackCode;
pageTracker._trackPageview(trackCode);
其他回答
如果你想做的是允许用户为页面添加书签/共享页面,而你不需要它恰好是正确的URL,并且你没有使用哈希锚来做任何其他事情,那么你可以分两部分来做;您使用该位置。然后在主页上执行检查,以查找其中包含哈希锚的URL,并将您重定向到后续结果。
例如:
用户位于www.site.com/section/page/4用户执行一些操作,将URL更改为www.site.com/#/section/page/6(带有哈希)。假设您已将第6页的正确内容加载到页面中,因此除了哈希之外,用户不会受到太大的干扰。用户将此URL传递给其他人,或为其添加书签其他人或同一用户稍后会访问www.site.com/#/ssection/page/6www.site.com/上的代码使用如下方式将用户重定向到www.site.com/section/page/6:
if (window.location.hash.length > 0){
window.location = window.location.hash.substring(1);
}
希望这是有意义的!对于某些情况,这是一种有用的方法。
使用HTML5历史API中的history.pushState()。
有关详细信息,请参阅HTML5历史API。
位置的任何更改(window.location或document.location)都将导致对新URL的请求,如果您不仅仅是更改URL片段。如果更改URL,则更改URL。
如果您不喜欢当前使用的URL,请使用服务器端URL重写技术,如Apache的mod_rewrite。
可以添加定位标记。我在我的网站上使用这个,这样我就可以通过Google Analytics跟踪人们在页面上访问的内容。
我只是添加了一个锚标记,然后添加了我要跟踪的页面部分:
var trackCode = "/#" + urlencode($("myDiv").text());
window.location.href = "http://www.piano-chords.net" + trackCode;
pageTracker._trackPageview(trackCode);
正如Thomas Stjernegaard Jeppesen所指出的,当用户浏览Ajax链接和应用程序时,您可以使用History.js修改URL参数。
距离这个答案已经过去了将近一年,History.js不断发展,并变得更加稳定和跨浏览器。现在,它可以用于管理兼容HTML5的历史状态,也可以用于许多仅支持HTML4的浏览器。在本演示中,您可以看到它如何工作的示例(以及如何尝试其功能和限制)。
如果您在如何使用和实现这个库方面需要任何帮助,我建议您查看演示页面的源代码:您会发现它非常容易做到。
最后,要全面解释使用哈希(和hashbangs)的问题,请查看Benjamin Lupton的链接。