我如何让一个JavaScript动作对当前页面有一些影响,但也会改变浏览器中的URL,这样当用户点击重新加载或书签时,就会使用新的URL ?
如果后退按钮可以重新加载原始URL,那就太好了。
我试图在URL中记录JavaScript状态。
我如何让一个JavaScript动作对当前页面有一些影响,但也会改变浏览器中的URL,这样当用户点击重新加载或书签时,就会使用新的URL ?
如果后退按钮可以重新加载原始URL,那就太好了。
我试图在URL中记录JavaScript状态。
当前回答
有一个Yahoo YUI组件(浏览器历史记录管理器)可以处理这个问题:http://developer.yahoo.com/yui/history/
其他回答
我成功地做到了:
location.hash="myValue";
它只是将#myValue添加到当前URL。如果需要在page Load上触发事件,可以使用相同的位置。哈希来检查相关的值。只要记住从location返回的值中删除#即可。散列。
var articleId = window.location.hash.replace("#","");
有一个jquery插件http://www.asual.com/jquery/address/
我觉得这就是你需要的。
在HTML 5中,使用历史记录。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,请使用历史记录。replaceState代替。
window.location.href包含当前URL。您可以读取它,可以添加到它,也可以替换它,这可能会导致页面重新加载。
如果,就像听起来的那样,你想在URL中记录javascript状态,这样它就可以被书签,而不需要重新加载页面,将它附加到当前URL的#后面,并让onload事件触发的一段javascript解析当前URL,以查看它是否包含保存的状态。
如果你使用?而不是#,您将强制页面重新加载,但由于您将在加载时解析保存的状态,这实际上可能不是一个问题;这将使前进和后退按钮也能正常工作。
我强烈怀疑这是不可能的,因为如果是的话,这将是一个令人难以置信的安全问题。例如,我可以制作一个看起来像银行登录页面的页面,并使地址栏中的URL看起来像真正的银行!
也许如果你解释一下为什么你想这样做,人们可能会建议其他的方法……
[2011年编辑:自从我在2008年写了这个答案以来,更多关于HTML5技术的信息浮出了出来,该技术允许修改URL,只要它来自同一个来源]