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

标签 jquery google-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...
}

关于jquery - executeScript 未填充全局变量 - Chrome 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30527812/

相关文章:

jquery - 加载更多按钮应该消失

javascript - jQuery:如何选择所有带有名称的单选按钮?

javascript - 简单的 Canvas 动画: 50x50 image moving across

javascript - 无法定义响应式 div 的宽度

css - 如何在浏览器扩展中注入(inject)具有用户来源的CSS?

google-chrome-extension - 如何在 Chrome 扩展中的后台脚本之间传递变量值

jquery - $.each() 未加载

jquery - 如何控制chrome扩展中的框架高度和宽度?

javascript - Chrome 扩展程序写入 Google 电子表格

javascript - 让 Google Chrome 扩展程序仅在一个选项卡上运行