我如何让一个JavaScript动作对当前页面有一些影响,但也会改变浏览器中的URL,这样当用户点击重新加载或书签时,就会使用新的URL ?

如果后退按钮可以重新加载原始URL,那就太好了。

我试图在URL中记录JavaScript状态。


当前回答

有一个Yahoo YUI组件(浏览器历史记录管理器)可以处理这个问题:http://developer.yahoo.com/yui/history/

其他回答

我强烈怀疑这是不可能的,因为如果是的话,这将是一个令人难以置信的安全问题。例如,我可以制作一个看起来像银行登录页面的页面,并使地址栏中的URL看起来像真正的银行!

也许如果你解释一下为什么你想这样做,人们可能会建议其他的方法……

[2011年编辑:自从我在2008年写了这个答案以来,更多关于HTML5技术的信息浮出了出来,该技术允许修改URL,只要它来自同一个来源]

什么是为我工作是- history.replaceState()函数这是如下-

history.replaceState(data,"Title of page"[,'url-of-the-page']);

这将不会重新加载页面,你可以使用javascript的事件

如果你想让它在不支持历史记录的浏览器中工作。pushState和history。popState,“旧的”方法是设置片段标识符,这不会导致页面重新加载。

基本思想是将window.location.hash属性设置为一个包含所需状态信息的值,然后使用窗口。onhashchange事件,或者对于不支持onhashchange的旧浏览器(IE < 8, Firefox < 3.6),定期检查哈希是否已经改变(例如使用setInterval)并更新页面。您还需要检查页面加载时的哈希值,以设置初始内容。

如果你使用的是jQuery,有一个hashchange插件可以使用浏览器支持的任何方法。我相信也有其他库的插件。

需要注意的一件事是与页面上的id发生碰撞,因为浏览器将滚动到具有匹配id的任何元素。

我给出了一个更简单的答案,

window.history.pushState(null, null, "/abc")

这将在浏览器URL的域名后面添加/abc。只需复制这段代码并将其粘贴到浏览器控制台,就可以看到URL更改为“https://stackoverflow.com/abc”

我成功地做到了:

location.hash="myValue";

它只是将#myValue添加到当前URL。如果需要在page Load上触发事件,可以使用相同的位置。哈希来检查相关的值。只要记住从location返回的值中删除#即可。散列。

var articleId = window.location.hash.replace("#","");