Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firefox addon 如何相互使用port.on()和port.emit()_Firefox Addon_Firefox Addon Sdk - Fatal编程技术网

Firefox addon 如何相互使用port.on()和port.emit()

Firefox addon 如何相互使用port.on()和port.emit(),firefox-addon,firefox-addon-sdk,Firefox Addon,Firefox Addon Sdk,我试图使用port.on()和port.emit()同时使用页面工作程序和pageMod,但是define.js的信号对pageMod的port.on()没有任何影响。。。这是使用port.on()和port.emit()的正确方法,还是不允许以这种方式将两者链接在一起 index.js: pageMod.PageMod({ include: "*", contentScriptWhen: "ready", contentScriptFile: [ data.url("jqu

我试图使用port.on()和port.emit()同时使用页面工作程序和pageMod,但是define.js的信号对pageMod的port.on()没有任何影响。。。这是使用port.on()和port.emit()的正确方法,还是不允许以这种方式将两者链接在一起

index.js:

pageMod.PageMod({
  include: "*",
  contentScriptWhen: "ready",
  contentScriptFile: [
    data.url("jquery.js"),
    data.url("jquery-ui.min.js"),
    data.url("define.js")
  ],
  onAttach: function(worker){
      worker.port.on("getWord", function(word) {
          console.log(word);
          worker.port.emit("newWord", word);
      });
      worker.port.on("updatedWord", function(URL){
          console.log(URL);
      });
    }
});

dictionaryRef.Page({
    contentScriptWhen: "ready",
    contentScriptFile: [
      data.url("jquery.js"),
      data.url("jquery-ui.min.js"),
      data.url("define.js"),
    ],
    contentURL: "http://www.dictionary.com/browse/",
    onAttach: function(worker){
        worker.port.on("newWord", function(word) {
            console.log(word);
            self.contentURL = "http://www.dictionary.com/browse/" + word;
            worker.port.emit("updatedWord", self.contentURL);
        });
    }
});
define.js:

$(window).dblclick(function() {
    var selected = getSelected();
    if (selected!="") {
        calldictionary(selected);
        var completedURL = "http://www.dictionary.com/browse/" + selected;
        pageMod.port.emit("getWord", selected);
        $('#define').dialog("open");
        dictionaryRef.contentURL = completedURL;
    }
});



function getSelected() {
    if (window.getSelection) {
        return window.getSelection().toString();
    } else if (document.selection) {
        return document.selection.createRange().text;
    }
    return '';
}

基本上,getSelected()将捕获一个突出显示的单词,然后“dblclick”绑定应通过pageMod应接收的port.emit()发送一个信号,然后传递给页面工作程序以更改其URL,这将允许我访问DOM并刮取字典定义,以便它可以在弹出窗口的主窗口中显示。目前,port.emit()语句都不起作用。

我不是sdk爱好者,但你看到了吗:是的,我已经阅读了MDN文档,但它对我没有太大帮助:/
窗口有一个
getSelection()
方法,但没有
getSelection
属性。你确定吗?我目前使用getSelection的方式很好,也许方法调用的括号是可选的。我还没有让您的加载项运行,但b/c jquery ui抱怨
“jquery未定义”
,这对我来说没有意义,因为jquery在
contentScriptFile
中列在第一位。不过,有一件事是,您的内容脚本查找一个选择,但它是由pageMod attach事件触发的,并且内容的选择通常发生在页面附加之后。通常,访问选项的脚本将通过带有
SelectionContext
上下文的
context菜单
,或
action按钮