2013-03-26 185 views
3

我运行一个简单的:window.location.hash没有创造浏览器历史记录条目

window.location.hash = "hash"; 

在URL页面加载之后添加一个哈希值。我得到了mySite.com/aPage#hash。当我点击后退按钮时,我预计url会变回mySite.com/aPage,而不会有任何实际加载/返回。相反,我将在我的网站/页面之前回到历史记录。

当我调用window.location.hash例如在由用户触发的点击事件回调中。

我创建了一个测试:http://jsbin.com/idukiz/1/ 见代码:http://jsbin.com/idukiz/1/edit

只有最后一个哈希setTimeout函数里面添加的行为像我期望的那样。任何想法如何让它在没有setTimeout的情况下工作?

回答

1

任何想法如何使它在没有setTimeout的情况下工作?

一个动态地创建<a>#yourHash到您dispatchEvent鼠标点击HREF

window.onload = function() { 
    location.hash = 'foo'; // no history item created, just to help visibility 
    var a = document.createElement('a'), 
     ev = document.createEvent("MouseEvents"); 
    a.href = '#bar'; // this will create history item 
    ev.initMouseEvent("click", true, false, self, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 
    a.dispatchEvent(ev); // dispatch click 
}; 

代码示例here。谷歌浏览器25测试。

+0

谷歌浏览器不需要这个,是吗? Chrome会为每个'location.hash'更改创建历史记录'...或者,如果它位于'onload'中,则不会创建历史记录? – Rudie 2013-03-26 21:07:15

+0

这个问题是关于页面加载时间之后的问题,其中'location.hash'通常不会更新历史记录。 – 2013-03-26 21:19:43

+0

Actauly它不会运行/创建历史记录条目,即使在文档就绪或窗口onload在铬中。我只需要它在IE中,它在文档准备好的地方工作。 – Hans 2013-04-05 11:38:44

相关问题