如何在面板的onMessage方法中发出消息?

时间:2013-07-18 09:30:42

标签: javascript javascript-events google-chrome-extension firefox-addon-sdk

当我在面板的onMessage()方法中发出消息时,我遇到了使用Addon Builder进行Firefox扩展开发的问题。错误信息为“self is not defined”。我的代码是这样的:

main.js

中的

var savesubmittedPanel = require("sdk/panel").Panel({
  width: 322,
  height: 427,
  contentURL: data.url("savesubmitted.html"),
  include:["http://*/*","https://*/*"],
  contentScriptFile: [ data.url("js/savesubmitted.js")],
  onMessage: function(messagedata) {
      switch(messagedata.type) {
      case 'get.submittedid':
        self.port.emit("response.get.submittedid",submittedIdentity);
        break;
      case 'add.identity':
        addIdentityToList(messagedata.identity);
        notifyUpdatedIdentities();
        self.port.emit("response.add.identity")
        break;
      }
  }           
});
js/savesubmitted.js

中的

self.postMessage({type:"get.submittedid"});
    self.port.on("response.get.submittedid",function(response){
        //do something
    });

我写的所有这些代码都是从Chrome扩展API转换而来的。 chrome扩展中的代码是这样的:

在内容脚本中:

chrome.extension.sendMessage({type : "get.submittedid"}, function(response) {
        pageIdentitySave=response;
        showSaveIdentityTab();
    });
background.js中的

chrome.extension.onMessage.addListener(function(message, sender, sendResponse){    
        console.log("Background.js: " + "Received message: "+message.type+" from tab: "+sender.tab.id);         
        if(message.type == "get.submittedid") {
            sendResponse(submittedIdentity);
        }

所以,怎么了?感谢。

1 个答案:

答案 0 :(得分:1)

main.js中,使用savesubmittedPanel.port.emit代替self.port.emit

另请参阅:Communicating using "port"