我在我的 firefox 插件中的 main.js、page-mod 的内容脚本和面板的内容脚本之间的消息传递出现了一些问题。我将 chrome 扩展代码转移到了 firefox 插件。
这些js文件加载的顺序是什么?我尝试用控制台弄清楚,但日志已刷新。
我已经将特定于 chrome 的 API 转移到了 firefox 插件 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
's中head
包含一个panel.js
withscript
标签:
function addParentListener(){
window.addEventListener("message",function (e) {
var message=e.data;
if(message.type="some type"){
//do something
}
},false);
}
所以消息可以从 to 发送pm-content.js
到panel.js
withcontentWindow.postMessage
吗?以及panel.js
用于window.addListener
接收味精(这些示例代码是从 chrome 扩展代码复制而来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);
}
我运行代码时遇到很多错误。那么我应该更改这些消息传递代码吗?如何更改?谢谢你。