我正在构建一个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);
});
答案 0 :(得分:1)
您正在使用两个异步执行的函数。您为chrome.tabs.query
和chrome.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...
}