Chrome расширение теряет разрешение activeTab - PullRequest
0 голосов
/ 06 марта 2020

У меня есть расширение, которое при нажатии «действия браузера» (значок рядом с адресной строкой) выполняет скрипт на странице текущей вкладки:

background. js

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript({
    file: 'controls.js'
  });
});

controls.js вводит некоторые вещи в DOM, чтобы пользователь мог нажать клавишу, чтобы сказать background.js, чтобы установить соединение WebRT C и выполнить другие бизнес-логи c вещи.

Обычно это работает просто отлично. Но иногда расширение перестает работать на вкладке, если оно было открыто, но некоторое время не использовалось, я думаю, что обычно после того, как компьютер перешел в спящий режим и снова проснулся. Когда это происходит, в консоли для background.js я получаю сообщение об ошибке «Unchecked runtime.lastError: Не удается получить доступ к содержимому страницы. Манифест расширения должен запрашивать разрешение на доступ к соответствующему хосту».

Любая идея, почему это может произойти, или что я могу сделать, чтобы перехватить эту ошибку и обработать ее, чтобы получить разрешения обратно?

1 Ответ

0 голосов
/ 30 марта 2020

Мне потребовалось много времени, чтобы разобраться в этом.

Если пользователь некоторое время простаивал, при обновлении страницы веб-сайт, на который я добавляю JS, будет перенаправлен на сайт аутентификации в другом домене, который затем перенаправит пользователя обратно. Обычно это происходит достаточно быстро, чтобы этого не замечать, но Chrome удаляет разрешение activeTab при изменении домена.

Я обрабатываю потерю разрешения, уведомляя пользователя через текст значка, более или менее так:

chrome.tabs.executeScript(tab.id, {
  code: 'alert("hello activeTab")'
}, (result) => {
  if (result === undefined) { // this means that activeTab permission is lost
    console.log('lost activeTab permission :(');
    chrome.browserAction.setBadgeText({
      text: 'off',
      tabId: tab.id
    });
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...