gpt4 book ai didi

javascript - 火狐SDK : redefine content-script function

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

我有 firefox 插件,它向所有页面注入(inject)两个内容脚本。

var workers = [];

pageMod.PageMod({
include: "*",
contentScriptFile: [
self.data.url("content/autofill/lib_generic.js"),
self.data.url("content/autofill/lib.js"),
],
// add worker to the list
onAttach: function(worker)
{
workers.push(worker);

var filename = getDomainSpecificFilename(worker.contentURL);

worker.on("detach", function()
{
var index = workers.indexOf(worker);
if (index >= 0)
workers.splice(index, 1);
});
}
});

lib_generic.js 包含一个名为 apply_forms(...) 的函数(其描述并不重要)。该函数从 lib.js 文件中调用。但是这个过程不适用于多个页面,所以对于每个这样的页面我都有一个特定的脚本 - 这些文件也只包含一个名为 apply_forms(...) 的函数。

我有一个函数,它将当前域作为输入并返回所需特定脚本的名称,如果应该使用通用,则返回 false

我需要的是 - 在必要时 - 使用特定的 apply_forms 重新定义通用 apply_forms

我试过

tabs.activeTab.attach({
contentScriptFile: [ filename ]
});

worker.port.emit("apply_forms_loaded");

在其中一个内容脚本中:

var apply_forms_loaded = false;

self.port.on("apply_forms_loaded", function() {
console.log("LOADED");
apply_forms_loaded = true;
});

整个过程是这样开始的:

var timer;

timer = setInterval(function(){

if (apply_forms_loaded) {

clearInterval(timer);
start(); // apply_forms is called somewhere inside this call
}
}, 10);

不幸的是,tabs.activeTab.attach 似乎在不同的上下文中注入(inject)了内容脚本,所以通用函数总是被调用。

我能做些什么来说服 activeTab 在相同的上下文中添加内容脚本,还是我应该以不同的方式来做? (然后是哪一个)

或者问题可能在于 - 我不知道 - 当我发送 apply_forms_loaded 消息时内容脚本没有完全注入(inject)?

我一直在尝试为 Chrome 重新定义函数定义,并且我已经成功了(url to SO question)

感谢您的建议。

最佳答案

没错,通过 pagemod 添加的脚本与通过 tabs.attach 添加的脚本位于不同的 JS 沙箱中。您可以做的是使用新的 exportFunction() 函数将函数注入(inject)到实际窗口中——这样函数就在真实窗口中,并且总是会被覆盖。然后你可以从 unsafeWindow 调用它..

关于javascript - 火狐SDK : redefine content-script function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25740353/

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