executeScript 未填充全局变量 - Chrome 扩展

executeScript not populating global variable - Chrome Extension

我正在构建一个 chrome 扩展,并且有一个空数组变量 array_out。我需要用来自回调函数 executeScript 中的数组值填充此数组。

但是,由于某些原因,全局数组 array_out 没有被填充,如 console.log 所示,可能是因为 chrome 函数在我的 运行 之后jQuery?

有什么帮助吗?

我的代码如下:

$(document).ready(function(){
    var array_out = [];

    chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
        chrome.tabs.executeScript(tabs[0].id, {
            code: " \
                var array_in = ['one', 'two', 'three']; \
            "
        }, function(result){
            array_out = result[0];
            console.log('IN: ' + array_out.length);
        });
    });
    console.log('OUT: ' + array_out.length);
});

您正在使用两个异步执行的函数。您为 chrome.tabs.querychrome.tabs.executeScript 都提供了回调函数,但试图访问仅在 chrome.tabs.executeScript.

的回调方法中设置的变量

为了确保您在初始化后访问 array_out,您必须将访问代码 (console.log('OUT: ' + array_out.length);) 放在回调结束时调用的单独函数中chrome.tabs.executeScript 的函数(或直接在回调函数本身中)。通过这样做,您仍然可以在调用 $(document).ready() 时执行代码,而且在两个异步函数调用其分配数组内容的回调函数之后也可以执行代码。

例如:

 var array_out = [];

$(document).ready(function(){


    chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
        chrome.tabs.executeScript(tabs[0].id, {
            code: " \
                var array_in = ['one', 'two', 'three']; \
            "
        }, function(result){
            array_out = result[0];
            console.log('IN: ' + array_out.length);
            accessArray();
            //you can do stuff with array_out here...
        });
    });
   //console.log('OUT: ' + array_out.length);  //-- array_out will not yet be set here
});

function accessArray()
{
     console.log('OUT: ' + array_out.length);

     //you can do more stuff with array_out here...
}