Вызов 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/
Пожалуйста, предоставьте полный тестовый пример в следующий раз, так как проблема часто заключается не в том фрагменте кода, который, по вашему мнению, имеет место.