Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在我的chrome扩展中运行chrome.tabs.executeScript()时出现意外结果?_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript 在我的chrome扩展中运行chrome.tabs.executeScript()时出现意外结果?

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扩展中),我得到了一些意想不到的结果:

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)
                {
                }
            })();
        }
    });