chrome.tabs.update перестает работать при вызове из расширения - PullRequest
0 голосов
/ 14 октября 2019

Я попробовал следующий код. В основном он делает снимок экрана со всех вкладок, открытых в текущем окне:

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 голосов
/ 14 октября 2019

Перемещение расширения в фоновый скрипт решило проблему.

Причина в том, что всплывающее окно закроется после переключения вкладки. Следовательно, он должен работать в фоновом режиме, где он не прерывается при закрытии всплывающего окна.

0 голосов
/ 14 октября 2019

При обновлении следующей вкладки как active tab. убедитесь, что текущая вкладка больше не активна, выполнив

chrome.tabs.update(tabArray[i-1].id, { active: false }, ()=>{});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...