【问题标题】:How to manually dispatch hashchange event如何手动调度 hashchange 事件
【发布时间】:2019-11-26 17:35:15
【问题描述】:

1 - 对于.addEventListenerhashChange 事件,WebKit 的正确语法是什么?

2 - 是否可以(以及如何)通过.dispatchEvent 在上述浏览器上手动/以编程方式调度 hashChange 事件?

TIA。

我找到了 1 的答案:

window.addEventListener("hashchange", function() {console.log(location.hash)});

但我仍然不知道如何发送 hashchange 手册,因为我不知道应该将什么 EVENTOBJECT 传递给 window.dispatchEvent(EVENTOBJECT)

【问题讨论】:

  • 经过几次尝试后,我问了这个问题,所以我认为我缺乏关于这个过程的一些基本知识。这就是我要求基础知识的原因。你没有任何证据证明我缺乏努力。但是,如果您仍然可以帮助我,我将非常感激。

标签: javascript


【解决方案1】:

如果你想在不改变哈希值的情况下强制 hashchcange 事件,你应该调用:

window.dispatchEvent(new HashChangeEvent("hashchange"))

传递给事件处理程序的对象将有这个可用的道具:

String oldURL;
String newURL;

这是我找到的唯一信息:

https://github.com/WebKit/webkit/blob/master/Source/WebCore/dom/HashChangeEvent.h

在这里收到答案后:

http://forum.php.pl/index.php?showtopic=213470

【讨论】:

    【解决方案2】:

    下面是如何让它在 Internet Explorer (IE11) 上运行

    /**
     * cross browser hash change event dispatch
     */
    function dispatchHashchange() {
        if (typeof HashChangeEvent !== "undefined") {
            window.dispatchEvent(new HashChangeEvent("hashchange"));
            return;
        }
    
        // HashChangeEvent is not available on all browsers. Use the plain Event.
        try {
            window.dispatchEvent(new Event("hashchange"));
            return;
        } catch (error) {
            // but that fails on ie
        }
    
        // IE workaround
        const ieEvent = document.createEvent("Event");
        ieEvent.initEvent("hashchange", true, true);
        window.dispatchEvent(ieEvent);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2012-04-20
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多