Я не уверен, является ли это ошибкой или неправильной настройкой моего файла манифеста, но разрешение <all_urls>
не работает с внедрением контента в скрипт. Вот простой пример, который вызывает ошибку
манифест.json:
{
"manifest_version": 2,
"name": "Bug?",
"version": "1",
"description": "This seems to be a bug",
"minimum_chrome_version": "50",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"permissions": [
"<all_urls>",
"tabs",
"webNavigation"
]
}
фон.js:
chrome.webNavigation.onBeforeNavigate.addListener(info => {
chrome.tabs.executeScript(info.tabId, {
frameId: info.frameId,
code: 'console.log("works")',
runAt: 'document_start'
}, () => {
if(chrome.runtime.lastError)
console.error(chrome.runtime.lastError.message)
})
})
Моя цель
Я хочу, чтобы мои сценарии содержимого выполнялись до того, как браузер обработает какой-либо HTML-код на странице и во всех ее подфреймах. Я знаю, что могу указать свои сценарии контента в файле манифеста. Однако это не позволяет мне запускать другой сценарий содержимого для корня и подфреймов. Таким образом, приведенный выше код является хорошим игрушечным примером того, как может выглядеть мой возможный код.
Что на самом деле происходит
Скрипты содержимого не выполняются со следующей ошибкой для каждого кадра:
Cannot access contents of url "<some url>". Extension manifest must request permission to access this host.
Что?... <all_urls>
не означает все URL?
Что заставляет это работать?
Если я изменю chrome.webNavigation.onBeforeNavigate
на chrome.webNavigation.onCommitted
, инъекция будет работать как положено (за исключением страниц about:blank
, которые можно легко исправить). Однако это не гарантирует, что мой сценарий содержимого будет запущен до обработки любого html.
есть идеи?
<all_urls>
означает не все URL-адреса, а все поддерживаемые URL-адреса. Можете ли вы привести пример URL-адреса, который не работает? - person Xan   schedule 17.05.2016