gpt4 book ai didi

ajax - 如何使用 mozilla sdk 分离内容脚本?

转载 作者:行者123 更新时间:2023-12-02 04:54:18 26 4
gpt4 key购买 nike

我正在编写一个密码管理器,我的扩展程序在准备好的页面上创建了一个监听器,所以在导航了几个 url 之后,我就有了一堆监听器。我想响应用户单击“提交”表单按钮,但同时没有多个监听器处于事件状态,因此我想分离内容脚本。

现在它监听表单提交,然后检查加载的下一页是否有“密码不正确”或类似的东西,然后做一些其他的事情。这是我附加监听器的代码:

tabs.on("ready", function(tab) {
fillLoginAndPass(tab);
listenForLoginSubmit(tab);
});

function listenForLoginSubmit(tab) {
// attach submit listener
worker = tab.attach({
contentScriptFile: [data.url("jquery-1.11.1.min.js"), data.url("listener-script.js")]
});

worker.port.on("submittedCredentials", function (formSubmitURL, enteredLogin, loginField, enteredPassword, passwordField) {
tab.on("ready", function() {
checkLogin(tab, formSubmitURL, enteredLogin, loginField, enteredPassword, passwordField);
});
});
}

我试过使用 worker.destroy(),但没有效果——port.on() 脚本仍然执行了多次。还有另一种方法吗?提前致谢。

编辑

澄清一下,这是我的代码使用 worker.destroy() 的样子:

function listenForLoginSubmit(tab) {
// attach submit listener
worker = tab.attach({
contentScriptFile: [data.url("jquery-1.11.1.min.js"), data.url("listener-script.js")]
});

worker.on("detach", function() {
console.log("Worker detached from "+tabs.activeTab.url);
});

worker.port.on("submittedCredentials", function (formSubmitURL, enteredLogin, loginField, enteredPassword, passwordField) {
tab.on("ready", function() {
checkLogin(tab, formSubmitURL, enteredLogin, loginField, enteredPassword, passwordField);
worker.destroy();
});
});
}

function checkLogin(tab, formSubmitURL, enteredLogin, loginField, enteredPassword, passwordField) {
console.log("Hello!");
/* code */
}

输出的区别是:

// without worker.destroy()
/* Log in to wikipedia.org */
console.log: passman: Hello!

/* Log out, return to login page */
/* Log in a second time */
console.log: passman: Hello!
console.log: passman: Hello!
console.log: passman: Worker detached from https://en.wikipedia.org/w/index.php?title=Special:Search&search=&go=Go

// with worker.destroy()
/* Log in to wikipedia.org */
console.log: passman: Hello!
console.log: passman: Worker detached from https://en.wikipedia.org/w/index.php?title=Special:Search&search=&go=Go

/* Log out, return to login page */
/* Log in a second time */
console.log: passman: Hello!
console.log: passman: Worker detached from https://en.wikipedia.org/w/index.php?title=Special:Search&search=&go=Go
console.log: passman: Hello!
console.log: passman: Worker detached from https://en.wikipedia.org/w/index.php?title=Special:Search&search=&go=Go

如果我第三次这样做,我会收到 3 个“Hello!”,依此类推。再次感谢您提供的任何帮助。

编辑 2评论中的错误报告 Zer0 链接有答案。在这里:

let { off } = require("sdk/event/core");
off(worker.port);

最佳答案

我不得不说我没有尝试过这个想法,但正如任何人回答的那样,也许它可以帮助你:据我所知,内容脚本是通过工作人员添加的。因此,也许您可​​以尝试用一个新的(没有内容脚本)覆盖工作人员:

worker.on("detach", function() {
worker = tab.attach({
contentScriptFile: [data.url("jquery-1.11.1.min.js")]
});
});

或者,也许,您可以仅使用 listener-script.js 空白文件或覆盖该内容脚本中定义的类的代码覆盖该文件。希望它能奏效或带来新的想法!

关于ajax - 如何使用 mozilla sdk 分离内容脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441378/

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