在浏览器中更改URL而不使用JavaScript加载新页面

我如何获得可能对当前页面有一定影响的JavaScript操作,但是也会更改浏览器中的URL,因此如果用户点击重新加载或书签,则会使用新的URL?

如果后退按钮将重新加载原始URL,这也会很好。

我正在尝试在URL中记录JavaScript状态。


如果您希望它在不支持history.pushStatehistory.popState浏览器中工作,“旧”方法是设置片段标识符,这不会导致页面重新加载。

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

如果您使用的是jQuery,那么会有一个hashchange插件,它将使用浏览器支持的任何方法。 我相信也有其他库的插件。

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


使用HTML 5,请使用history.pushState函数。 举个例子:

<script type="text/javascript">
var stateObj = { foo: "bar" };
function change_my_url()
{
   history.pushState(stateObj, "page 2", "bar.html");
}
var link = document.getElementById('click');
link.addEventListener('click', change_my_url, false);
</script>

和一个href:

<a href="#" id='click'>Click to change url to bar.html</a>

如果您想更改URL而不添加条目到后退按钮列表,请改用history.replaceState


window.location.href包含当前的URL。 您可以从中读取,您可以附加到它,并且可以替换它,这可能会导致页面重新加载。

如果听起来像是想要在URL中记录javascript状态,那么它可以被标记为书签,而无需重新加载页面,在#之后将它追加到当前URL并且由onload事件触发一段javascript解析当前查看它是否包含保存的状态。

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

链接地址: http://www.djcxy.com/p/70279.html

上一篇: Change the URL in the browser without loading the new page using JavaScript

下一篇: Backbone events are not working