tabs.executeScript после tabs.create в расширении Chrome - PullRequest
0 голосов
/ 23 октября 2018

Я создаю простое расширение Chrome с всплывающим, фоновым скриптом и скриптом контента, который я хочу внедрить программным способом.

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

Мой подход заключается в отправке сообщения из всплывающего окна в мой фоновый сценарий и выполнении следующего кода:

chrome.tabs.create({ url }, () => {
  chrome.tabs.executeScript({ file: 'content.js' });
});

Но это терпит неудачу и говорит мне, что мое расширение не имеет правильных разрешений, даже если у меня установлены разрешения ["activeTab"].

Проблема в том, что я предпочел бы не иметь разрешения на выполнение для каждого URLНапример, ["https://*/*", "http://*/*"] (Это может показаться подозрительным, но, возможно, это мое единственное решение).

Я настроил пример репо здесь: https://github.com/adambrgmn/test-extension. Он может быть загружен в Chromeкак расширение.

Кто-нибудь еще сталкивался с этой проблемой?Есть обходные пути?

1 Ответ

0 голосов
/ 08 августа 2019

activeTab дает вам разрешение на текущую вкладку только тогда, когда пользователь активирует ваше расширение из вкладки, а не новые вкладки, созданные из него.

Возможно, вам придетсяперед открытием тега запросите разрешение на этот URL, например:

// in your popup.js
// Listen to your "create tab" button
document.querySelector('button').addEventListener('click', () => {
    // Get the URL they entered
    const urlEntered = document.querySelector('input').value;

    // Request the permission
    chrome.permissions.request({origins: [urlEntered]}, granted => {
        if (granted) {
            // Create the tab only if it was granted
            chrome.tabs.create({ url }, tab => {
                chrome.tabs.executeScript(tab.id, { file: 'content.js' });
            });
        } else {
            alert('You need to grant permission')
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...