Javascript 在我的chrome扩展中运行chrome.tabs.executeScript()时出现意外结果?
通过运行以下脚本(在我的Chrome扩展中),我得到了一些意想不到的结果:Javascript 在我的chrome扩展中运行chrome.tabs.executeScript()时出现意外结果?,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,通过运行以下脚本(在我的Chrome扩展中),我得到了一些意想不到的结果: chrome.windows.getAll({populate:true},函数(wnds) { 对于(var w=0;w
chrome.windows.getAll({populate:true},函数(wnds)
{
对于(var w=0;w
当脚本自行运行时,我会在控制台日志屏幕中看到以下内容:
但是,当我使用调试器逐步完成它时,它会输出如下内容(或每个页面的正确信息):
我显然在期待第二个结果。那么我做错了什么呢?您需要为每次调用
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)
{
}
})();
}
});
chrome.windows.getAll({populate:true},函数(wnds)
{
对于(var w=0;w
噢,见鬼。忘了那些关闭。谢谢
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)
{
}
})();
}
});