を与える:私の拡張機能であるHTMLページとタブを作成タブを作成し、その中にコンテンツスクリプトを挿入すると、私は次の操作を行う必要があり、私のChromeの拡張機能の背景ページでパーミッションエラー
- フォルダまたはバックグラウンドページによって動的に生成されます;
- 新しいタブが読み込まれたら、メッセージパッシングを使用するために、その中にコンテンツスクリプトを挿入します。
- スクリプトが挿入されたら、いくつかのデータで新しいタブにメッセージを送信します。
これは、常にエラーになり:
tabs.executeScript: "URLのコンテンツにアクセスできません"。拡張マニフェストは、このホストにアクセスするためのアクセス許可を要求する必要があります。
またはページまたはスクリプトが拡張フォルダ内の.htmlと.js専用ファイルに保存されている場合:
tabs.executeScript:URLの内容にアクセスできません "chrome-extension://ehdjfh.../page。 html "拡張マニフェストは、このホストにアクセスするためのアクセス許可を要求する必要があります。
chrome.tabs.executeScript()
が実行され、コンテンツスクリプトの注入がブロックされているときにエラーが発生します。 (私はコード化されたhtmlのURLに文字列として直接渡される場合、切り捨てられるタブにいくつかの大きなデータを渡すために、この構造が必要です)
ここでは動作する拡張機能に動作をテストするために使用できるコードサンプルですちょうどペーストをコピーして、Chromeの拡張機能をロード:
background.jsを
chrome.browserAction.onClicked.addListener(function() {
var getSampleHTML = function() {
return 'javascript:\'<!doctype html><html>' +
'<head></head>' +
'<body>' +
'<p id="myId">page created...</p>' +
'</body>' +
'</html>\'';
};
// create a new tab with an html page that resides in extension domain:
chrome.tabs.create({'url': getSampleHTML(), 'active': false}, function(tab){
var getSampleScript = function() {
return 'chrome.extension.onRequest.addListener(' +
'function(request, sender, sendResponse) {' +
'if(request.action == "print_data" && sender.tab.id == ' + tab.id + '){' +
'var p = document.getElementById("myId");' +
'p += "<br>data received: " + request.data;' +
'}' +
'});'
'document.getElementById("myId").innerHTML += "<br>content-script loaded...";'
};
// inject the content-script in the page created:
chrome.tabs.executeScript(tab.id, {code: getSampleScript()}, function(){
// send the data to the content-script:
chrome.tabs.sendRequest(tab.id, {action: "print_data",
data: "some long data"});
});
});
});
manifest.jsonを
{
"name": "ContentScript Injection Sample",
"description": "",
"version": "0.1",
"permissions": ["tabs"],
"background": {
"persistent": false,
"scripts": ["background.js"]
},
"browser_action": {
"default_title": "open a new tab and inject contentscript"
},
"manifest_version": 2
}
エラーは何が間違っているかを正確に示します。ホストのアクセス許可を宣言する必要があります。[match patterns](https://developer.chrome.com/extensions/match_patterns.html)を参照してください。 –
独自の拡張機能で異なるページ間でデータを共有したい場合は、単に 'chrome.extension.getViews'(https://developer.chrome.com/extensions/extension.html#method-getViews)を使うだけです。コンテンツスクリプトは、Webページにスクリプトを挿入するために使用されます(および使用のみ可能)。メッセージの受け渡しは、通常、Webページ、コンテンツスクリプトまたは*その他の拡張機能との通信に使用されます。 –
@RobW実行時にローカルページに注入されるコンテンツスクリプトの実行を可能にするために、マニフェストのマッチパターンをどのように設定できるのだろうと思っていました(_ "chrome-extension:// */*" _ @ "content_scripts"の_ "matches_ _"プロパティで拡張マニフェストを設定することで、外部のhttp urlのように "permissions" _がエラーを出します_ _ "js" _スクリプトがないのでナンセンスでエラーも返すプログラムで注入する)** manifest.json **の変更で** background.js **コードを実行できないと思われる** – guari