从插件代码中侦听内容脚本中的消息

时间:2013-11-03 15:23:02

标签: javascript firefox-addon firefox-addon-sdk

插件代码,
创建Panel,填充confirmPanel.html
从内容脚本中收听getPreferences消息,
构建一个JSON字符串并尝试发送回内容脚本..

var confirmPanel = require("sdk/panel").Panel({
    width: 450,
    height: 350,
    contentURL: Data.get("confirmPanel.html"),
});

confirmPanel.port.on("getPreferences", function() {

    var prefs = '{'
        +'"fileName":"HelloWorld.txt", '
        +'"pathToFile":"/home/rob/", '
        +'}';

    confirmPanel.port.emit("prefs", prefs);
})

confirmPanel.html指定Panel个内容..

<html>
    <head>
        <script src="confirmPanel.js"></script>
    </head>
    <body onload="Addon_Panel.getPreferences()">
    </body>
</html>

confirmPanel.jsconfirmPanel.html的内容脚本 等待body加载,然后将getPreferences消息发送到插件代码 然后等待来自插件代码的prefs消息,将JSON字符串记录到控制台
console.log(prefs);永远不会被执行?

var Addon_Panel = {

    getPreferences: function() {
        addon.port.emit("getPreferences", '');
    }
};

addon.port.on("prefs", function (prefs) {
    console.log(prefs);
});

1 个答案:

答案 0 :(得分:0)

将附加内容脚本作为文件而不是将其包含在html中 main.js

var confirmPanel = require("sdk/panel").Panel({
    width: 450,
    height: 350,
    contentURL: Data.get("html/confirmPanel.html"),
    contentScriptFile: [Data.get("js/confirmPanel.js")]
});

confirmPanel.port.emit("prefs", prefs);

在内容脚本文件中..

self.port.on("prefs", function (prefs) {
    console.log("in content script");
});