Проверьте, является ли текущая вкладка chrome: // newtab, используя только разрешение activeTab - PullRequest
0 голосов
/ 29 октября 2018

В создаваемом расширении Chrome я пытаюсь реализовать следующую логику:

  • Если сценарий содержимого может быть внедрен в текущую страницу после действия пользователя (на основании разрешения activeTab), отобразите пункт контекстного меню.
  • Иначе, не отображать его.

Однако, выполнив поиск по максимуму и минимуму в документации по MDN и Chrome, я не смог найти встроенный API для проверки этого.

Мой текущий обходной путь заключается в следующем (используя webextension-polyfill для основанного на обещаниях browser API):

const checkAvailability = () => {

  const getTabInfo = browser.tabs.query({active: true, currentWindow: true});

  const getErrorInfo = browser.tabs.executeScript({
    code: '' //noop
  }).then(res => null, err => err);

  return Promise.all([getTabInfo, getErrorInfo]).then((info) => {
    const [tabs, err] = info;

    const permissionsNotRequestedMsg = 'Cannot access contents of the page. Extension manifest must request permission to access the respective host.';

    return !err || (err.message === permissionsNotRequestedMsg && tabs[0].url !== 'chrome://newtab/');
    // on new tab page, `permissionsNotRequestedMsg` is always shown; on other pages,
    // this error simply means user has not yet initiated any extension-related action;
    // any other error message means the page cannot be accessed by extensions
  });

};

Это кажется хакерским, но работает в почти во всех ситуациях. Единственная ситуация, когда происходит сбой, - это когда URL вкладки имеет значение chrome://newtab/ и , пока еще не было инициировано никаких действий пользователя. В этом случае tabs.query не возвращает информацию об URL, поэтому tabs[0].url равно undefined.

Есть ли способ обойти это ограничение? Или, в качестве альтернативы, можно ли как-то отобразить сообщение пользователю, если попытка доступа к расширению из chrome://newtab/ не удалась, без запроса дополнительных разрешений в манифесте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...