window.location.hash没有创建浏览器历史记录条目

时间:2013-03-26 19:49:11

标签: javascript url hash browser-history

我正在运行一个简单的:

window.location.hash = "hash";

在页面加载后立即在网址中添加哈希值。我的,mySite.com/aPage#hash。当我点击后退按钮时,我希望网址更改回mySite.com/aPage,而不会有任何实际加载/返回。相反,我将被带回mySite.com/aPage之前的历史记录条目。

当我调用window.location.hash时效果很好在用户触发的单击事件回调中。

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

只有在setTimeout函数中添加的最后一个哈希行为与我期望的一样。有没有setTimeout如何让它工作的任何想法?

1 个答案:

答案 0 :(得分:1)

  

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

动态创建的<a> {em} href #yourHash dispatchEvent鼠标点击。

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。在Google Chrome 25中测试。