在Add-on SDK主附加组件脚本和sdk / page-worker脚本之间进行通信

时间:2016-01-19 12:00:42

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

我正在尝试在我的主要附加SDK脚本 index.js 和使用sdk/page-worker创建的页面工作者中的脚本之间进行通信。不幸的是,我遇到了问题。

我能够从我的主脚本与页面工作者进行通信:在下面的代码中,我从页面工作者的脚本中获取了来自socket.on - console.log('new post')的事件。但是,主加载项脚本不会看到从页面工作者发送的消息。

HTML( worker.html ):

<html lang="pl">
    <head>
        <meta charset="UTF-8">

        <script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
        <script type="text/javascript">
            var socket = io.connect('http://192.168.0.21:8081');
            socket.on('newPost', function(data) {
                console.log("new post");
                //to this everything works ok!!!!!!!!!!!!
                self.port.emit('newPost', "");
            });
        </script>
    </head>
    <body>

    </body>
</html>

index.js 文件:

var buttons = require('sdk/ui/button/action');
var functions = require('./module.js');
var pageWorkers = require("sdk/page-worker");
var notifications = require('sdk/notifications');
var self = require("sdk/self");
functions.act.checkMsgsCount();

var pageWorker = pageWorkers.Page({
    contentScriptWhen: "ready",
    contentURL: self.data.url("worker.html")
});

pageWorker.port.on('newPost', function(data) {
    console.log("sent newPost");
    functions.act.newPostNotify();
});

buttons.ActionButton({
    id: "main-bt",
    label: "Start",
    icon: {
        "16" : "./icon-16.png",
        "32" : "./icon-32.png",
        "64" : "./icon-64.png"
    },    
    onClick: functions.act.checkMsgsCount
});

1 个答案:

答案 0 :(得分:2)

worker.html 中,我必须将self.port.emit更改为:addon.port.emit

因为我在<script>标记内的HTML文件中使用了脚本,所以我必须通过addon对象与主要的加载项脚本进行通信。