我的firefox插件中的main.js,page-mod的内容脚本和面板的内容脚本之间的消息传递存在一些问题。我将Chrome扩展代码传递给firefox插件。如何从内容脚本向面板发送消息?
加载这些js文件的顺序是什么?我试图用控制台计算出 ,但日志已刷新。
我已经将Chrome特定的API传递给firefox addon API,但我不能确定其他本地消息js代码应该更改。现在,我将向您展示该示例。 在
main.js
:var pmworker = [] var pagemod = PageMod({ include: ['*'], contentScriptWhen: 'start', contentScriptFile: [data.url('pm-content.js')], onAttach: function(worker) { worker.port.on('message', function(data) { switch (data.type) { case 'some type': do something; break; } }); worker.on('detach',function() { detachWorker(this, pmworker); }); pmworker.push(worker); } }); var panel = require("sdk/panel").Panel({ width: 322, height: 427, contentURL: data.url("panel.html"), include:["http://*/*","https://*/*"] }); panel.on('message', function(messagedata) { switch(messagedata.type) { case 'some type': panel.port.emit("something"); break; } });
在pm-content.js
:
var sendInfoToFrame = function(){
var frameWindow = document.getElementById(iframeId).contentWindow;
var infoMsg = {type:"some type",content:something};
frameWindow.postMessage(infoMsg, "*");
}
在
panel.html
的
head
包括panel.js
与script
标签:
function addParentListener(){
window.addEventListener("message",function (e) {
var message=e.data;
if(message.type="some type"){
//do something
}
},false);
}
所以该消息可以b e从pm-content.js
发送到panel.js
与contentWindow.postMessage
?而panel.js
使用window.addListener
来接收味精(这些示例代码从panel.js
和pm-content.js
是从铬扩展代码复制,我不会改变它)?
相反,信息从panel.js
发送到内容脚本的方式如何?我也从chrome复制相同的代码,我不知道它是否正确。示例代码是: 在panel.js:
function sendSomeMessage(value){
var message = {type : "sometp",value: value};
window.parent.postMessage(message, "*");
}
,并在pm-content.js
接收代码:
function addMessageListener() {
window.addEventListener("message",function(e) {
var message = e.data;
if (message.type == null) {
return;
}
var msgType = message.type;
switch (msgType) {
case "sometp":
//do something
}
}, false);
}
我运行代码,我得到很多errors.So的我应该改变这些消息传递代码和如何?谢谢。