gpt4 book ai didi

javascript - 如何动态更改 Firefox 附加组件的页面 worker 的 ContentURL?

转载 作者:行者123 更新时间:2023-11-30 00:21:16 26 4
gpt4 key购买 nike

我正在开发一个简单的词典插件,它允许用户突出显示一个词(通过双击它),这将导致出现一个显示该词的词典定义的弹出窗口。

我无法动态更改我正在使用的页面 worker 的 ContentURL,以便我可以访问它的 DOM 并从中抓取定义。我尝试过动态更改单个页面 worker 的 URL,以及每次选择一个新词时创建一个页面 worker ,将信息发送到插件,然后销毁页面 worker 。

这是我的代码(第二个想法):

定义.js:

$(window).dblclick(function() {
var selected = getSelected();
if (selected!="") {
calldictionary(selected);
var completedURL = "http://www.dictionary.com/browse/" + selected;
$('#define').dialog("open");
createPageWorker(completedURL);

}
});

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

定义发送器.js:

var sendInformation = "var elements = document.querySelectorAll('div.def-set > div'); " +
"for (var i = 0; i < elements.length; i++) {" +
" postMessage(elements[i].textContent) " +
"}" +
"self.destroy();";

function createPageWorker(URL){

dictionaryReference.Page({
contentScriptWhen: "ready",
contentScriptFile: [
data.url("jquery.js"),
data.url("jquery-ui.min.js"),
data.url("define.js"),
data.url("definitionsender.js")
],
contentURL: URL,
contentScript: sendInformation,
onMessage: "function(message){"+
"console.log(message);}"
});
}

如果我使用我的第一个想法,这条线

createPageWorker(completedURL);

将替换为行

dictionaryReference.contentURL = completedURL;

到我的 index.js 文件中包含的页面 worker “dictionaryReference”。

请不要简单地发布指向 MDN 的链接;我已经通读了所有相关文档,但没有给我太多指导。

最佳答案

来自 https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Content_Scripts (请原谅我发布 MDN 文档 ;-)):

  • the add-on's main code, including "main.js" and other modules in "lib", can use the SDK high-level and low-level APIs, but can't access web content directly
  • content scripts can't use the SDK's APIs (no access to globals exports, require) but can access web content

似乎您正在尝试从 define.js 访问 createPageWorker(),这似乎是一个内容脚本。关注点分离禁止这样做。交流的方式是使用类似

self.port.emit("createPageWorker", URL);

在内容脚本中,通过

收听该消息
self.port.on("createPageWorker", function(URL) { 
// do something here
);

在附加代码中(index.js 或其他)。

关于javascript - 如何动态更改 Firefox 附加组件的页面 worker 的 ContentURL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33044554/

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