Вызов SDK надстройки dispatchEvent не отправляет событие из сценария содержимого на страницу

Здравствуйте, у меня есть простое расширение Firefox (на основе SDK надстройки) с pageMod. pageMod внедряет некоторый скрипт в страницу, которая вызывает одну функцию

function dispatchEvent(name, data){
    try {
        data = data || {};
        // passing some data through html element
        document.getElementById('MyDiv').innerText = JSON.stringify(data);
        var evt = document.createEvent('Event');
        evt.initEvent(name.toString(), true, true);
        if(document.getElementById('MyDiv').dispatchEvent(evt))
            console.log("Dispatch event: "+name+" data: "+JSON.stringify(data));
    } catch (e) {
        console.log("Error:" + e);
    }
}
dispatchEvent("MyEvent", {});

На веб-странице у меня есть прослушиватель событий, добавленный через MyDiv.addEventListener(...). Проблема в том, что внедренный скрипт не отправляет событие на страницу. Функция dispatchEvent возвращает true, но ничего не происходит. Вот мой код страницы.

var myMod = pageMod.PageMod({
    include: ["http://localhost/mysite/*"],
    contentScriptFile: [data.url("js/script.js")],
    contentScriptWhen: "end",
    onAttach: function onAttach(worker) {
          console.log("CS injected");
    }
});

Если я запускаю код contentScript через консоль Firebug, он работает. Но мне нужно отправлять события из contentScript.

PS Я также попытался использовать unsafeWindow.document вместо документа и использовать jQuery события / прослушиватели событий, и это тоже не работает.

1 ответ

Я потратил время, чтобы превратить ваш вопрос в тестовый набор, и он работает для меня: https://builder.addons.mozilla.org/addon/1018586/revision/13/

Пожалуйста, предоставьте полный тестовый пример в следующий раз, так как проблема часто заключается не в том фрагменте кода, который, по вашему мнению, имеет место.

Другие вопросы по тегам