Javascript 调用dispatchEvent的加载项SDK不会将事件从内容脚本发送到页面
您好,我有一个简单的firefox扩展(基于附加SDK)和pageMod。 pageMod向页面注入一些脚本,该页面调用一个函数Javascript 调用dispatchEvent的加载项SDK不会将事件从内容脚本发送到页面,javascript,firefox,javascript-events,dispatchevent,firefox-addon-sdk,Javascript,Firefox,Javascript Events,Dispatchevent,Firefox Addon Sdk,您好,我有一个简单的firefox扩展(基于附加SDK)和pageMod。 pageMod向页面注入一些脚本,该页面调用一个函数 function dispatchEvent(name, data){ try { data = data || {}; // passing some data through html element document.getElementById('MyDiv').innerText = JSON.stri
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,但不发生任何事情。
这是我的pageMod代码
var myMod = pageMod.PageMod({
include: ["http://localhost/mysite/*"],
contentScriptFile: [data.url("js/script.js")],
contentScriptWhen: "end",
onAttach: function onAttach(worker) {
console.log("CS injected");
}
});
如果我通过firebug控制台运行contentScript代码,它就会工作。但我需要从contentScript发送事件
另外,我还尝试使用unsafeWindow.document而不是document,并使用jQuery事件/事件侦听器,但它也不起作用。我花时间将您的问题转换为测试用例,它对我有效:
请下次提供完整的测试用例,因为问题通常不在您认为它存在的代码中。如果您将
innerText
(仅限MSIE)替换为textContent
,数据设置是否正确?乍一看,我没有发现你的代码有任何问题,它应该可以工作。数据设置正确。事件调度存在问题。事实上,页面上的事件侦听器不会捕获从内容脚本发送的事件。它应该-明确允许从受信任代码向不受信任代码发送事件。您确定页面上的事件侦听器已正确注册吗?如果您从页面本身发送一个事件,它会被接收吗?是的,我在上面写到,如果我从firebug控制台运行contentScript代码,它会正常工作。