如何手动调度hashchange事件

时间:2013-02-22 23:52:05

标签: javascript

1 - 对于.addEventListenerhashChange事件,WebKit(适用于iPad的Safari的主要功能,如果适用于Win Chrome)的正确语法是什么?

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

TIA。

我找到了1的答案:

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

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

2 个答案:

答案 0 :(得分:6)

如果你想强制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

答案 1 :(得分: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);
}