这是我遇到的最烦人的问题:
var appslst = [];
function f1()
{
chrome.management.getAll(function(lst)
{
appslst = lst;
});
}
function f2() // this function isn't working!!
{
var l = appslst.length;
var ind = 0;
while(ind < l)
{
document.getElementById("here").value = document.getElementById("here").value.concat(String(ind), ". ", appslst[ind].name, "\n");
ind += 1;
}
}
function f3()
{
f1();
f2();
}
我认为appslst
- 因为它是一个全局变量 - 应该在函数f1()
和f2()
中看到
但上面的代码不起作用,我不明白为什么。
另外,我尝试了以下代码(并且它正在运行):
var appslst = [];
function f1()
{
chrome.management.getAll(function(lst)
{
appslst = lst;
var l = appslst.length;
var ind = 0;
while(ind < l)
{
document.getElementById("here").value = document.getElementById("here").value.concat(String(ind), ". ", appslst[ind].name, "\n");
ind += 1;
}
});
}
任何帮助非常感谢:) 提前谢谢:)
更多细节: 我正在学习如何为Google Chrome构建扩展程序。 我已下载示例:http://code.google.com/chrome/extensions/examples/extensions/app_launcher.zip 来自此链接:http://code.google.com/chrome/extensions/samples.html 我查看了代码并发现了我编写的相同代码,但它正在工作! 这是我正在谈论的部分:
function onLoad()
{
chrome.management.getAll(function(info)
{
var appCount = 0;
for (var i = 0; i < info.length; i++) {
if (info[i].isApp) {
appCount++;
}
}
if (appCount == 0) {
$("search").style.display = "none";
$("appstore_link").style.display = "";
return;
}
completeList = info.sort(compareByName);
onSearchInput();
});
}
答案 0 :(得分:2)
chrome.management.getAll
是异步的 - 因此,只有在Chrome执行getAll
时才需要传递执行的函数。
这意味着f1(); f2();
会像这样:
f1
被称为getAll
被调用(这是f1
正在做的事情)f2
被称为appslst
(这就是f2
正在做的事情)getAll
已完成;传递给它的函数叫做appslst
填充了来自getAll
的数据(这是传递的函数正在执行的操作)换句话说,appslst
在调用f2
时仍为空。所以你还需要暂停f2()
:
chrome.management.getAll(function(lst){
appslst = lst;
f2(); // only run when getAll is done and appslst is filled
});