web-dev-qa-db-ja.com

Chrome Extension Manifest 'Matches'

私は簡単なChrome=拡張機能を試していますが、content_scriptsmatches配列に値を提供する際に問題に直面しています。

{
  "name": "My Extension",
  "version": "1.0",
  "description": "My Extension Experiment",
  "browser_action": {
    "default_icon": "icon.png",
    "default_title": "Ext",
    "default_popup": "popup.html"
  },
  "content_scripts": {
    "matches": ["http://*"],
    "js": ["scripts.js"]
  }
}

この拡張機能をChromeにロードしようとすると、次のメッセージが表示されます。

「C:\ Users\foo\Desktop\Extensions\bar」から拡張機能をロードできませんでした。
「content_scripts」の値が無効です。

しかし、自分の価値について何が「無効」かはわかりません。私がやろうとしているのはすべてのURLに一致するため、拡張機能はそれが実行されているページのDOMを(scripts.js内のjavascript経由で)操作できます。私は何かを見逃していますか、これについてすべて間違っていますか?

更新

この質問を投稿した後、私はGoogleの例が私の例とは少し異なっていることに気付きました。そこで、構文を反映するためにコードを少し変更しました。

"content_scripts": [{
  "matches": ["http://*"],
  "js": ["scripts.js"]
}]

そうは言っても、拡張機能をロードしようとすると、次のエラーが表示されます。

「C:\ Users\foo\Desktop\Extensions\bar」から拡張機能をロードできませんでした。
'content_scripts [0] .matches [0]'の値が無効です。

39
Aristotle

content_scriptsフィールドの値を角括弧で囲む必要があります。

"content_scripts": [ {
  "matches": ["http://*"],
  "js": ["scripts.js"]
} ]

(詳細については Chrome Docs をご覧ください)

ちなみに、http://*/*を使用すると、すべてのURL( docs を参照)に対してより適切に一致し、それらも一致する必要がある場合はhttps://*/*を追加します。

編集:

編集後、表示されるエラーは、一致パターンが正しくないためです。

56
adrianbanks

すべてのURLに一致させる場合、Googleはこの目的のために特別なパターン<all_urls>

サンプル使用法:

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

詳細については、このページを参照してください: https://developer.chrome.com/extensions/match_patterns

46
thdoan

一致パターンは次の構造にする必要があります[スキーム]://[ホスト] [パス]

  1. schemeis '*' | 'http' | 「https」| 'ファイル' | 「ftp」
  2. Hostis '' | 「」。 (「/」と「*」を除くすべての文字)+
  3. pathは '/'(任意の文字)

HTTP/SおよびFILE URLを照合するには、次を使用します。

 "matches": [
    "*://*/*",
    "file://*/*"
  ],

参照: https://developer.chrome.com/apps/match_patterns

ところで、ローカルファイルへのアクセスを許可するには、許可を追加します。

"permissions": [
   "file://*/*"
]

または、拡張機能設定ページでファイルアクセスを承認します。

4
David D.

エラーが発生している多くの場合:

'content_scripts[0].matches' is missing or invalid.

または

'content_scripts[0].matches[0]': Empty path.

入力しようとしている、またはcreating、必要な特定のURLの一致フィールド。すべてのURLを使用する場合は、<all_urls>以下のようなタグ。

"content_scripts": [
        {
            "matches": ["<all_urls>"],
            "js": [ "jquery.js" ]
        }
    ]

「js」配列にリストされているファイルには、アプリに対する相対パスがあります。つまり、「manifest.json」の場所はルートディレクトリです。

注:jquery.jsはプロジェクトのディレクトリにあるファイルであり、必要なスクリプトファイルに置き換える必要があります。

2
Anselm