5

我正在运行一个简单的:

window.location.hash = "hash";

在页面加载后立即在 URL 中添加哈希。我明白了,mySite.com/aPage#hash。当我单击后退按钮时,我希望 url 更改回 mySite.com/aPage 而没有任何实际加载/返回。相反,我被带回到 mySite.com/aPage 之前的历史条目。

它运行良好,当我调用 window.location.hash 例如在用户触发的点击事件回调中。

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

只有在 setTimeout 函数中添加的最后一个哈希的行为与我预期的一样。任何想法如何在没有 setTimeout 的情况下使其工作?

4

1 回答 1

1

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

<a>一个用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
};

代码演示在这里。在谷歌浏览器 25 中测试。

于 2013-03-26T20:06:10.130 回答