【问题标题】:window.location.hash not creating browser history entrywindow.location.hash 不创建浏览器历史记录条目
【发布时间】:2013-03-16 18:47:51
【问题描述】:

我正在运行一个简单的:

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 的情况下工作?

【问题讨论】:

    标签: javascript url hash browser-history


    【解决方案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
    };
    

    代码here的演示。在 Google Chrome 25 中测试。

    【讨论】:

    • 谷歌浏览器不需要这个,是吗? Chrome 会为每个 location.hash 更改创建历史“条目”......或者如果它在 onload 中则不创建?
    • 这个问题是关于页面加载时间/之后,location.hash 通常不会更新历史记录。
    • 实际上它不会运行/创建历史记录条目,即使在文档准备好或在 chrome 中加载窗口时也是如此。我只需要它在 IE 中,它可以在文档中工作。
    猜你喜欢
    • 2022-09-25
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2013-05-21
    相关资源
    最近更新 更多