7

1 - 什么是 WebKit 的正确语法(主要用于 iPad 上的 Safari,如果它适用于 Win Chrome 则很好).addEventListenerhashChange事件?

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

TIA。

我找到了1的答案:

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

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

4

2 回答 2

18

如果你想在不改变哈希值的情况下强制 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

于 2013-03-04T22:10:31.143 回答
0

以下是如何让它在 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);
}
于 2019-10-18T11:31:26.460 回答