gpt4 book ai didi

javascript - 无法让 port.emit 和 port.on 在 Firefox 附加组件中工作

转载 作者:行者123 更新时间:2023-11-30 18:27:18 24 4
gpt4 key购买 nike

我正在发送这样的消息:

self.port.emit("nodes_grubed", textNodesValues);

并想对此使用react:

worker.port.on("nodes_grubed", requestRenderedtext);

但它不起作用。我应该改变什么?你可以试试我的插件 here .

main.js:

var widgets = require("widget");
var tabs = require("tabs");
var self = require("self");

function requestRenderedtext(textNodesText) {
console.log('text nodes requesting');
}

var widget = widgets.Widget({
id: "mozilla-link",
label: "Mozilla website",
contentURL: "http://www.mozilla.org/favicon.ico",
onClick:
function(worker) {
tabs.activeTab.attach({
contentScriptFile: self.data.url("process.js")
});
worker.on("nodes_grubed",requestRenderedtext);
worker.port.on("nodes_grubed",requestRenderedtext);
},
onAttach:
function(worker) {
worker.on("nodes_grubed",requestRenderedtext);
worker.port.on("nodes_grubed",requestRenderedtext);
}
});
widget.on("nodes_grubed",requestRenderedtext);
widget.port.on("nodes_grubed",requestRenderedtext);

process.js:

function getTextNodes() {
var walker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_TEXT,
null,
false
);

var node;
textNodes = [];
var textNodesValues=[];
while(node = walker.nextNode()) {
if (node.parentNode.tagName!='SCRIPT') {
textNodesValues.push(node.nodeValue);
textNodes.push(node)
}
}
if (textNodesValues.length!=0) {
console.log('emmiting nodes');
self.port.emit("nodes_grubed", textNodesValues);
}
}

getTextNodes();

最佳答案

当您的小部件被点击时,您不会将 worker 作为参数获取(点击发生时它不存在)- 您通过调用 tabs.activeTab.attach() 创建它。您应该使用 tabs.activeTab.attach() 的返回值,如下所示:

  onClick: 
function() {
var worker = tabs.activeTab.attach({
contentScriptFile: self.data.url("process.js")
});
worker.port.on("nodes_grubed", requestRenderedtext);
},

关于javascript - 无法让 port.emit 和 port.on 在 Firefox 附加组件中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10511063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com