Chrome.tabs.executeScript thows error "Unchecked runtime.lastError при запуске tabs.executeScript: не удается получить доступ к содержимому url..."

Итак, я пытаюсь выполнить script из внешнего источника, например www.script.google.com, в background.js. Но я получаю эту ошибку -

Unchecked runtime.lastError while running tabs.executeScript: Cannot access contents of url "chrome-devtools://devtools/bundled/devtools.html?&remoteBase=https://chrome…&dockSide=undocked&toolbarColor=rgba(223,223,223,1)&textColor=rgba(0,0,0,1)". Extension manifest must request permission to access this host.

Что я делаю, это отправить сообщение из popup.js в background.js В popup.js -

 chrome.runtime.sendMessage({type:"addtask"});

В background.js -

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
    if(request.type == "addtask")
    {
        chrome.tabs.executeScript(null,
                       {file:"https://script.google.com/url of script....."});
    }
});

Мой манифест .json -

{
    "name": "Extension",
    "version": "0.0.1",
    "manifest_version": 2,
    "browser_action": {
        "default_popup": "popup.html"
    },
     "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "content_scripts": [{
        "js": ["jquery.min.js","contentscript.js"],
        "matches": ["http://*/*","https://*/*"],
        "css" : ["feedback.css"]
    }],
    "permissions": [
          "storage","tabs","https://script.google.com"
        ],
    "web_accessible_resources": ["feedback.js","html2canvas.js","event.js"],
    "content_security_policy": "script-src 'self' https://script.google.com/*; object-src 'self'"
}

Ответ 1

Обычный и прямой. Добавьте *://*/* к разрешениям.

Ответ 2

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

Ниже приведен пример выполнения script на всех вкладках и правильная обработка ошибок:

tabs.forEach(tab => {
    chrome.tabs.executeScript(tab.id, { file: filename }, result => {
        const lastErr = chrome.runtime.lastError;
        if (lastErr) console.log('tab: ' + tab.id + ' lastError: ' + JSON.stringify(lastErr));
    });
});

Ответ 3

Это очень легко внедрить сценарий контента декларативно через manifest.json. Свойство match определяет, к каким URL-адресам может обращаться скрипт, а также к URL-адресам файловой системы.

    "content_scripts": [{

                         "matches": ["<all_urls>"],

                         "js": ["contentScript.js"]

                       }],

Чтобы узнать больше о шаблонах матчей, посетите https://developer.chrome.com/extensions/match_patterns

Чтобы узнать больше о внедрении скриптов https://developer.chrome.com/extensions/content_scripts#pi