gpt4 book ai didi

javascript - 在我的 Chrome 扩展程序中运行 chrome.tabs.executeScript() 出现意外结果?

转载 作者:行者123 更新时间:2023-12-03 11:50:58 25 4
gpt4 key购买 nike

运行以下脚本(在我的 Chrome 扩展程序中)得到了一些意想不到的结果:

        chrome.windows.getAll({populate: true}, function(wnds)
{
for(var w = 0; w < wnds.length; w++)
{
var tabs = wnds[w].tabs;

for(var t = 0; t < tabs.length; t++)
{
var tab = tabs[t];
var tabUrl = tab.url;

try
{
chrome.tabs.executeScript(tab.id, {
file: "content.js",
allFrames: true,
matchAboutBlank: true
}, function(arrRes)
{
if(chrome.runtime.lastError)
{
console.error("INJ ERR: " + chrome.runtime.lastError.message);
}
else
{
console.log("INJ OK: " + tabUrl);
}
});
}
catch(e)
{
}
}
}
});

当脚本单独运行时,我在控制台日志屏幕中看到以下内容:

enter image description here

但是当我使用调试器单步执行它时,它会输出类似这样的内容(或每个页面的正确信息):

enter image description here

我显然期待第二个结果。那么我做错了什么?

最佳答案

您需要为每次调用 executeScript 创建一个闭包,以便每次调用回调函数时都能获得正确的 tabUrl 值。按照您现在的代码方式,所有调用都将使用 tabUrl 的最后一个值。解决这个问题的一种方法是:

    chrome.windows.getAll({populate: true}, function(wnds)
{
for(var w = 0; w < wnds.length; w++)
{
var tabs = wnds[w].tabs;

for(var t = 0; t < tabs.length; t++)
(function()
{
var tab = tabs[t];
var tabUrl = tab.url;

try
{
chrome.tabs.executeScript(tab.id, {
file: "content.js"
}, function(arrRes)
{
if(chrome.runtime.lastError)
{
console.error("INJ ERR: " + chrome.runtime.lastError.message);
}
else
{
console.log("INJ OK: " + tabUrl);
}
});
}
catch(e)
{
}
})();
}
});

关于javascript - 在我的 Chrome 扩展程序中运行 chrome.tabs.executeScript() 出现意外结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25839819/

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