Chrome-extensiemanifest ‘komt overeen’

Ik probeer een eenvoudige Chrome-extensie, maar loop tegen een probleem aan met het opgeven van een waarde voor de matches-array in mijn content_scripts.

{
  "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"]
  }
}

Als ik deze extensie in Chrome probeer te laden, krijg ik het volgende bericht:

Kan extensie niet laden van ‘C:\Users\foo\Desktop\Extensions\bar’.
Ongeldige waarde voor ‘content_scripts’.

Ik kan echter niet zien wat er “ongeldig” is aan mijn waarde. Wat ik probeer te doen is elke URL matchen, zodat mijn extensie de DOM kan manipuleren (via javascript in scripts.js) van elke pagina waarop deze wordt uitgevoerd. Mis ik iets, doe ik dit helemaal verkeerd, of wat?

bijwerken

Na het plaatsen van deze vraag merkte ik dat het Google-voorbeeld iets anders was dan het mijne, dus ik heb mijn code een beetje aangepast om hun syntaxis weer te geven:

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

Dat gezegd hebbende, krijg ik nog steeds de volgende foutmelding wanneer ik mijn extensie probeer te laden:

Kan extensie niet laden van ‘C:\Users\foo\Desktop\Extensions\bar’.
Ongeldige waarde voor ‘content_scripts[0].matches[0]’.


Antwoord 1, autoriteit 100%

U moet de waarde van het veld content_scriptstussen vierkante haken plaatsen:

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

(zie de Chrome-documentenvoor meer informatie)

Overigens zou het gebruik van http://*/*een betere match zijn voor alle url’s (zie de docs), door https://*/*toe te voegen als je die ook wilt matchen.

Bewerken:

Na uw bewerking krijgt u een foutmelding omdat het overeenkomstpatroon onjuist is.


Antwoord 2, autoriteit 83%

Als je elke URL wilt matchen, heeft Google speciaal voor dit doel een speciaal patroon: <all_urls>

Voorbeeld van gebruik:

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

Zie deze pagina voor meer info:
https://developer.chrome.com/extensions/match_patterns


Antwoord 3, autoriteit 12%

Elk overeenkomstpatroon moet de volgende structuur hebben [schema]://[host][pad]

  1. schemais ‘*’ | ‘http’ | ‘https’ | ‘bestand’ | ‘ftp’
  2. hostis ‘‘ | ‘.’ (elk teken behalve ‘/’ en ‘*’)+
  3. padis ‘/’ (willekeurige tekens)

Voor het matchen van HTTP/S- en FILE-URL’s:

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

Ref: https://developer.chrome.com/apps/match_patterns

Trouwens, om toegang tot lokale bestanden toe te staan ​​- voeg de toestemming toe:

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

Of keur bestandstoegang goed op de pagina met extensie-instellingen.


Antwoord 4, autoriteit 4%

Voor velen die fouten krijgen met betrekking tot:

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

of

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

Proberen in te vullen, of maken, het veld voor overeenkomsten met uw specifieke benodigde URL.
Als je alle URL’s wilt gebruiken, gebruik dan de tag <all_urls>zoals hieronder.

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

Bestanden in de “js”-array hebben hun pad relatief ten opzichte van je app.
Met andere woorden, de locatie van “manifest.json” is uw hoofdmap.

Opmerking: jquery.js is een bestand in de directory van mijn project en je moet het vervangen door een willekeurig scriptbestand.


Antwoord 5

Na vele pogingen om te werken, komt het overeen met alle URL’s en ondersteunt het ook http & https.voer hier de code in

"manifest_version": 2,
 "content_scripts": [
    {
     "matches": [
        "*://*/*",
      ]
   }

Antwoord 6

Bro je bent vergeten toe te voegen

“manifest_version”:2

Wat verplicht is.

Other episodes