Firefox addon 如何相互使用port.on()和port.emit()
我试图使用port.on()和port.emit()同时使用页面工作程序和pageMod,但是define.js的信号对pageMod的port.on()没有任何影响。。。这是使用port.on()和port.emit()的正确方法,还是不允许以这种方式将两者链接在一起 index.js: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
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按钮
。