Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery chrome.tabs.create在循环中出现错误_Jquery_Google Chrome_Loops_Google Chrome Extension_Tabs - Fatal编程技术网

Jquery chrome.tabs.create在循环中出现错误

Jquery chrome.tabs.create在循环中出现错误,jquery,google-chrome,loops,google-chrome-extension,tabs,Jquery,Google Chrome,Loops,Google Chrome Extension,Tabs,在我的Chrome扩展上,我开发了一个“粘贴”功能,可以打开剪贴板中找到的所有URL,每个URL有一个选项卡 但是这个特性不能正常工作,有时它工作得很好,有时它只打开它应该打开的所有URL的一小部分 我怀疑Chrome API,更具体地说,Chrome.tabs.create应该对这个错误负责,所以我写了一段代码来测试它: popup.html: <!doctype html> <html> <head> <meta charset="utf-8

在我的Chrome扩展上,我开发了一个“粘贴”功能,可以打开剪贴板中找到的所有URL,每个URL有一个选项卡

但是这个特性不能正常工作,有时它工作得很好,有时它只打开它应该打开的所有URL的一小部分

我怀疑Chrome API,更具体地说,
Chrome.tabs.create
应该对这个错误负责,所以我写了一段代码来测试它:

popup.html:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="vendor/jquery-1.7.2_min.js"></script>
    <script type="text/javascript" src="popup.js"></script>
</head>
<body>
    <button id="actionTest">Test</button>
</body>
</html>
jQuery(function($){
    $('#actionTest').click(function(e){
        var urlList = ["http://stackoverflow.com/","http://en.wikipedia.org/wiki/Main_Page","http://www.codinghorror.com/blog/","http://nodejs.org/","https://github.com/","http://wallbase.cc/","http://www.chromium.org/Home","http://www.photoshoptuto.com/?s=test+chrome+tabs","http://www.youtube.com/","https://www.tumblr.com/","http://www.imdb.com/","http://www.flickr.com/","http://kickass.to/","https://www.dropbox.com/","http://fr.slideshare.net/","http://www.deviantart.com/","http://www.livejournal.com/","http://ohnotheydidnt.livejournal.com/82624099.html","http://www.etsy.com/","http://www.mediafire.com/","http://www.foxnews.com/","http://www.foxnews.com/politics/2013/10/21/obama-addresses-problems-with-health-care-website/"];
        $.each(urlList, function(key, val){
            chrome.tabs.create({ url: val}, function(tab){
                // console.log('openned: '+tab.url);
            });
        });
    });
});
如您所见,urlList包含22个URL,但当我按下测试按钮时,并不总是打开22个新选项卡

怎么了?
谢谢,我没有亲自测试(因为时间不够),但我相信问题在于:

问题
您正在从
popup.js
创建选项卡。一旦新选项卡接收到焦点,弹出窗口(
popup.html
)就会关闭/隐藏,任何JavaScript执行都会停止。这意味着在第一个选项卡收到焦点之前,打开的选项卡数量将与创建的
popup.js
数量相同。所以,有时是全部,有时是一些等等

解决方案
解决方案是在后台页面(或者更好的是事件页面)中模拟“制表符创建”代码。例如:

(当然,有许多可能的方法,例如消息传递等)

演示
为了演示的目的,我放了一个小的扩展来打开22个URL的新标签。为简单起见,它没有弹出窗口,只是一个浏览器操作。
文件结构如下所示:

TestCX
     |__background.js
     |__jquery-1.7.2_min.js
     |__manifest.json
background.js:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="vendor/jquery-1.7.2_min.js"></script>
    <script type="text/javascript" src="popup.js"></script>
</head>
<body>
    <button id="actionTest">Test</button>
</body>
</html>
jQuery(function($){
    $('#actionTest').click(function(e){
        var urlList = ["http://stackoverflow.com/","http://en.wikipedia.org/wiki/Main_Page","http://www.codinghorror.com/blog/","http://nodejs.org/","https://github.com/","http://wallbase.cc/","http://www.chromium.org/Home","http://www.photoshoptuto.com/?s=test+chrome+tabs","http://www.youtube.com/","https://www.tumblr.com/","http://www.imdb.com/","http://www.flickr.com/","http://kickass.to/","https://www.dropbox.com/","http://fr.slideshare.net/","http://www.deviantart.com/","http://www.livejournal.com/","http://ohnotheydidnt.livejournal.com/82624099.html","http://www.etsy.com/","http://www.mediafire.com/","http://www.foxnews.com/","http://www.foxnews.com/politics/2013/10/21/obama-addresses-problems-with-health-care-website/"];
        $.each(urlList, function(key, val){
            chrome.tabs.create({ url: val}, function(tab){
                // console.log('openned: '+tab.url);
            });
        });
    });
});
manifest.json:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <script type="text/javascript" src="vendor/jquery-1.7.2_min.js"></script>
    <script type="text/javascript" src="popup.js"></script>
</head>
<body>
    <button id="actionTest">Test</button>
</body>
</html>
jQuery(function($){
    $('#actionTest').click(function(e){
        var urlList = ["http://stackoverflow.com/","http://en.wikipedia.org/wiki/Main_Page","http://www.codinghorror.com/blog/","http://nodejs.org/","https://github.com/","http://wallbase.cc/","http://www.chromium.org/Home","http://www.photoshoptuto.com/?s=test+chrome+tabs","http://www.youtube.com/","https://www.tumblr.com/","http://www.imdb.com/","http://www.flickr.com/","http://kickass.to/","https://www.dropbox.com/","http://fr.slideshare.net/","http://www.deviantart.com/","http://www.livejournal.com/","http://ohnotheydidnt.livejournal.com/82624099.html","http://www.etsy.com/","http://www.mediafire.com/","http://www.foxnews.com/","http://www.foxnews.com/politics/2013/10/21/obama-addresses-problems-with-health-care-website/"];
        $.each(urlList, function(key, val){
            chrome.tabs.create({ url: val}, function(tab){
                // console.log('openned: '+tab.url);
            });
        });
    });
});


我希望这能帮助你解决你的问题。如果您不回来索取更多:)

请同时张贴您的舱单内容。您在控制台上(在您的后台oage或弹出窗口上)有任何错误吗?对不起,我忘了告诉您源代码在github上可用:。下面是声明。JSON:好的,我会回头看看:)同时,我建议你考虑把你的背景页面转换成事件页面(更多信息)。我已经和一个类似的问题挣扎了相当长的一段时间,所以我应该知道:(虽然,正如我在回答中所指出的,我自己没有测试过OP的代码,因此我对问题的原因进行了某种“有根据的猜测”。)非常感谢,这似乎是一个相关的解释,我会在工作后尝试。好的,它工作得很好,我将所有代码从popup.js移到background.js,并使用消息API在弹出窗口中显示一些消息。我很高兴它能工作。别忘了我最初关于将背景页面转换为事件页面的评论。它们是更多的资源是的,我会在下一个版本中这样做。