Chrome标签。创建并捕获新创建标签的屏幕截图

时间:2014-01-09 12:33:30

标签: javascript jquery google-chrome

我遇到了在chrome中捕获新创建的标签的问题。

我使用chrome.tabs.create创建新选项卡,并将tabid传递给我的回调函数,该函数捕获它。

function createtab(url) {
chrome.tabs.create({'url': url,'active':false}, function(tab) {

       captureWindowTab((tab.id);

});
}
function captureWindowTab(tabid) {

chrome.tabs.update(tabid, {}, function() {
     chrome.tabs.captureVisibleTab(27, {format:"png"}, function(dataUrl) {


                     capturecallback(dataUrl);


    });
});

} 
function capturecallback(dataurl) {

console.log(dataurl);

}

仅当我在当前现有标签上执行时,它才有效。我无法让它在新创建的标签上工作。总是返回undefined。

我不明白这个问题是什么。

2 个答案:

答案 0 :(得分:0)

根据文档,您似乎需要主机权限(或所有主机权限)才能捕获它。请参阅以下文件:

https://developer.chrome.com/extensions/tabs.html#method-captureVisibleTab

您是否拥有主机权限或所有主机权限?

我想你可能还需要"标签"许可,如果您还没有。

答案 1 :(得分:0)

这样解决了:

chrome.tabs.onUpdated.addListener(function(tabid , info) {
      //console.log('loading tab'+tabid);

      if(info.status == "complete") {

      chrome.tabs.get(tabid,function(tab) {


        chrome.topSites.get(function(sites){ 


          tab.url = NewTab.getHostFromUrl(tab.url);

          console.log(tab.url);

          //console.log('loaded '+tab.url);

          for (var i = 8 - 1; i >= 0; i--) {

              sites[i].url = NewTab.getHostFromUrl(sites[i].url);

              //console.log('checking '+sites[i].url);

              if(tab.url == sites[i].url && tab.url != 'newtab') {

                chrome.tabs.update(tabid, {'highlighted':true,'active':true}, function(tab){

                     chrome.tabs.captureVisibleTab(chrome.windows.WINDOW_ID_CURRENT, {format:"jpeg","quality":30}, function(dataUrl) {
                        // add data URL to array
                          if(dataUrl) {

                            console.log('its a winner!');

                            window.localStorage['topsite_'+encodeURI(NewTab.getHostFromUrl(tab.url))+'_thumbnail'] = dataUrl;
                            NewTab.getTopSites();


                          }

                        });




                });





              }

          };


       });



    });

  }

});