我正在构建一个 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.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...
}
关于jquery - executeScript 未填充全局变量 - Chrome 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30527812/