chrome.tabs.create函数包装器,为什么这不起作用?

时间:2011-11-28 20:58:23

标签: javascript google-chrome delay infinite-loop

我有最新的Chrome,我正在构建扩展程序。

请考虑以下代码:

var returnTab = false; // init the variable as false

var createNewTab = function(){
returnTab = false; // make sure we start with this var as false

chrome.tabs.create({url:'http://www.google.com/'}, function(tab){
    returnTab = tab; // put the returntab object inside the variable
});

while(returntab===false){  }; // wait for the tab to be created.
return returnTab;
};
c = createNewTab();

一切都很好,它应该工作;除了没有。 createNewTab()函数陷入无限循环,变量returnTab永远不会获得回调返回值。 如果我按照我的意思去做,没有等待循环一切正常,回调函数就会以它应该的方式执行。

为什么这不起作用?

LE:看起来回调函数等待循环完成。有没有人知道在回调函数启动之前保持整个函数忙的方法?

1 个答案:

答案 0 :(得分:1)

在这里猜测,因为我没有实际操作Chrome扩展程序的经验,但也许while()循环占用了线程,并且从未真正允许您在create()调用中指定的回调运行。如果你在常规网站上这样做会发生这种情况。

尝试将setTimeout()调用添加到等待循环中,这样,在等待时,它不使用任何CPU,而不是使用100%...我不知道你怎么能这样做在您的扩展环境中,您展示的代码并没有足够的上下文。

但是,如果我这样做,而不是循环和等待,我只需在回调函数中创建选项卡后添加您想要做的任何事情(在您设置returnTab的地方)。这是在JS中做事的正常方式......