从扩展名

时间:2019-10-14 19:50:55

标签: javascript google-chrome-extension

我尝试了以下代码。基本上,它需要从当前窗口中打开的所有选项卡中截取屏幕截图:

function captureWindowTabs(windowId, callbackWithDataUrlArray) {
  var dataUrlArray = [];

  // get all tabs in the window
  chrome.windows.get(windowId, { populate: true }, function(windowObj) {
    var tabArray = windowObj.tabs;

    // find the tab selected at first
    for(var i = 0; i < tabArray.length; ++i) {
      if(tabArray[i].active) {
        var currentTab = tabArray[i];
        break;
      }
    }

    // recursive function that captures the tab and switches to the next
    var photoTab = function(i) {
      chrome.tabs.update(tabArray[i].id, { active: true }, function() {
        chrome.tabs.captureVisibleTab(windowId, { format: "png" }, function(dataUrl) {
          // add data URL to array
          dataUrlArray.push({ tabId:tabArray[i].id, dataUrl: dataUrl });

          // switch to the next tab if there is one
          if(tabArray[i+1]) {
            photoTab(i+1);
          }
          else {
            // if no more tabs, return to the original tab and fire callback
            chrome.tabs.update(currentTab.id, { active: true }, function() {
              callbackWithDataUrlArray(dataUrlArray);
            });
          }
        });
      });
    };
    photoTab(0);
  });
}

当我从作为网页打开的popup.html调用此代码时,它按预期方式工作(我通过单击popup.html中的按钮触发此操作)。当我从浏览器扩展中调用它时,它只是从它选择的第一个选项卡中被打断了。知道为什么吗?我无法共享错误,因为从扩展名调用调试器时,调试器将关闭。

补充说明,有没有一种方法可以在不需要视觉标签切换的情况下达到预期的效果?

2 个答案:

答案 0 :(得分:0)

将下一个标签更新为active tab时。

,确保当前标签页不再是活动标签页
chrome.tabs.update(tabArray[i-1].id, { active: false }, ()=>{});

答案 1 :(得分:0)

将扩展名移至后台脚本可解决此问题。

原因是选项卡切换后,弹出窗口将关闭。因此,它要求在弹出窗口关闭时不被中断的后台运行。