Chrome拡張機能を作成しようとしていますが、JSが機能しません。コンソールにこのエラーが表示されます。
スクリプト ' https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js 'のロードを拒否しました。次のコンテンツセキュリティポリシーディレクティブに違反しているためです: " script-src 'self' blob:filesystem:chrome-extension-resource: "。
JQueryの実行をブロックしているのはなぜですか?
Chome website で説明したように、スクリプトがリモートスクリプトをロードできないようにするコンテンツセキュリティポリシーがあります。
HTTPS経由でexample.comからスクリプトリソースをロードできるようにする緩和されたポリシー定義は次のようになります。
"content_security_policy": "script-src 'self' https://example.com ; object-src 'self'"
あなたの場合、manifest.json
には以下を含める必要があります。
{
"name": "My Extension",
"manifest_version": 2,
"background":{
"scripts": [...]
},
"content_security_policy": "script-src 'self' https://example.com; object-src 'self'",
}
マニフェストJSONファイルで許可しましたか。このようなもの:
{
"name": "My Extension",
"content_scripts": [{
"js": ["jquery.min.js", "YourJavaScriptFile.js"],
"matches": ["http://*/*", "https://*/*"]
}]
}
省略した必須フィールドがありますが、基本的な考え方を示しています。
コンテンツセキュリティポリシーは、アプリケーションのセキュリティのもう1つのレイヤーです。スタイル、スクリプト、またはデータの読み込み元となるすべての原点を定義できます。スタイル、スクリプト、フォント、または接続のそれぞれについて、アプリケーションにロードするドメインを指定する必要があります。別のドメインのCDN jQueryを使用している場合は、コンテンツセキュリティポリシーでこのドメインを指定する必要があります。
このセキュリティレイヤーを追加したくない場合、任意のドメインからスタイルまたはスクリプトをロードする場合は、index.htmlに次のメタタグを追加し、インポートの前に配置するようにしてください。
<meta http-equiv="Content-Security-Policy" content="default-src *;">
ここで*は、任意のドメインにアクセスできるワイルドカード文字です。この追加のセキュリティレイヤーが必要な場合は、アプリケーションにインポートするすべてのドメインを指定する方法について非常に明確な documentation に移動することをお勧めします
まあ、jsにCDNを使用することはできません。「 https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js 」のコンテンツをコピーする必要があります= "jsディレクトリ内に新しいファイルを作成し、jquery.min.jsを呼び出してすべてを貼り付けます。次に、HTMLファイルヘッダーでこのURLを含む行を削除し、代わりにこのファイルを使用します
<script src="js/jquery.min.js"></script>
ただし、これが上記のURLのすべてのデータを含むファイルの書き込みパスであることを確認してください
乾杯、
簡単に長い話をします。 Google Chrome has CSP(Content Security Policy)は、chrome拡張機能は外部スクリプトを許可しないことを意味します。 vue cdn
を使用して、次の手順を実行するだけで準備完了です。
{
"manifest_version": 2,
"name" : "Hello Extension",
"version" : "1.0",
"permissions": [
"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"
],
"background": {
"scripts": ["popup.js"],
"persistent": false
},
"description" : "Testing the hello world extension",
"icons": {
"16" : "icons16.png",
"48" : "icons16.png",
"128" : "icons16.png"
},
"browser_action": {
"default_icon" : "icons16.png",
"default_popup" : "popup.html"
},
"content_security_policy": "script-src 'self' 'unsafe-eval' https://cdn.jsdelivr.net; object-src 'self'"
}
external js
にpopup.jsを追加すると、Vueコードが追加され、すべてがうまく機能します。var app = new Vue({
el: "#app",
data: {
name: ""
}
});
Chrome拡張機能のドキュメント によると、外部リソースのコピーをパッケージフォルダーにダウンロードし、スクリプトをローカルにロードする必要があります。
外部スクリプトのロードは許可されていません。
HTMLファイルには<script> some js code within it </script>
。スクリプトタグを削除すると、エラーはなくなりました。