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

Здравствуйте, у меня есть простое расширение для 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.

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

1 Ответ

1 голос
/ 01 октября 2011

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

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

...