これはバグか、マニフェストファイルの設定ミスであるかわかりませんが、<all_urls>
パーミッションがコンテンツスクリプトインジェクションでは機能していません。クロムの拒否<all_urls>コンテンツスクリプトのインジェクションの許可
{
"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"
]
}
background.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)
})
})
私の目標
私は私のコンテンツのスクリプトは、任意の前に実行したいここでエラー
manifest.jsonをの原因となる単純な例であります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_ URLではなく、すべての_supported_ URLを意味します。失敗したURLの例を挙げることはできますか? –
Xan