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

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

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


当前回答

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

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

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

其他回答

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

Facebook的图片库在URL中使用#散列来实现这一点。下面是一些url示例:

在点击“下一步”之前:

/photo.php?fbid=496429237507&set=a.218088072507.133423.681812507&pid=5887027&id=681812507

点击“下一步”后:

/photo.php?fbid=496429237507&set=a.218088072507.133423.681812507&pid=5887027&id=681812507#!/photo.php?fbid=496435457507&set=a.218088072507.133423.681812507&pid=5887085&id=681812507

注意,新URL后面紧跟着一个散列(#!)。

我成功地做到了:

location.hash="myValue";

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

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

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

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

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

window.location.href包含当前URL。您可以读取它,可以添加到它,也可以替换它,这可能会导致页面重新加载。

如果,就像听起来的那样,你想在URL中记录javascript状态,这样它就可以被书签,而不需要重新加载页面,将它附加到当前URL的#后面,并让onload事件触发的一段javascript解析当前URL,以查看它是否包含保存的状态。

如果你使用?而不是#,您将强制页面重新加载,但由于您将在加载时解析保存的状态,这实际上可能不是一个问题;这将使前进和后退按钮也能正常工作。