2010-05-04 10 views
28

Ich versuche meine Hände an einer einfachen Chrome-Erweiterung, aber ein Problem mit der Bereitstellung eines Wertes für die matches Array in meinem content_scripts.Chrome Extension Manifest 'Matches'

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

Wenn ich versuche, diese Erweiterung in Chrome zu laden, erhalte ich die folgende Meldung:

konnte nicht geladen werden Erweiterung von 'C: \ Users \ foo \ Desktop \ Extensions \ bar'.
Ungültiger Wert für 'content_scripts'.

Ich kann nicht sehen, was an meinem Wert "ungültig" ist. Was ich versuche zu tun, ist die Übereinstimmung mit jeder URL, so dass meine Erweiterung das DOM (über Javascript in scripts.js) jeder Seite manipulieren kann, auf der es ausgeführt wird. Fehle ich etwas, geht das alles falsch oder was?

Update

Nach dieser Frage veröffentlichen, habe ich bemerkt, dass das Google Beispiel als ich etwas anders war, so modifiziert ich meinen Code ein wenig ihre Syntax zu reflektieren:

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

Unter diesen Umständen ist sagte, ich bekomme immer noch den folgenden Fehler beim Versuch, meine Erweiterung zu laden:

Erweiterung konnte nicht von 'C: \ Users \ foo \ Desktop \ Ex geladen werden Spannungen \ bar '.
Ungültiger Wert für 'content_scripts [0] .matches [0]'.

+0

Ich erhielt den gleichen Fehler, aber ich habe '' Übereinstimmungen '' Schlüssel geschrieben. Wo sehe ich die chrome-Entwicklerdokumentation, die beim Erstellen von 'content_scripts' benötigt werden – diEcho

Antwort

45

Sie müssen den Wert des content_scripts Feld in eckigen Klammern umgeben:

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

(die Chrome Docs für weitere Informationen siehe)

übrigens http://*/* Verwendung wäre eine bessere Übereinstimmung für alle URLs (siehe docs), fügen Sie https://*/* hinzu, wenn Sie diese ebenfalls anpassen müssen.

Edit:

Nach Ihrer Bearbeitung der Fehler, den Sie ist nicht mehr korrekt sind wegen der Übereinstimmungsmuster zu bekommen.

+0

Ich sah das' http: // */* 'Muster, war aber besorgt, dass dies URLs benötigen würde, um ein'/'nach dem' zu haben http: // 'damit meine Erweiterung läuft. Ist das falsch? – Aristotle

+0

Auf der Dokumentseite zum Mustervergleich (http://code.google.com/chrome/extensions/match_patterns.html) wird dies ausführlich erläutert. Alle Erweiterungen, die ich gesehen habe, benutzen das 'http: // */*' Muster ohne Problem. – adrianbanks

+0

Ja. Ich sah diese Seite nur wenige Augenblicke bevor ich meine Frage stellte. Aber ihr Beispiel zeigt "http: // */*" als übereinstimmend "http: // www.google.com /", was mich zu der Annahme brachte, dass eine URL einen Schrägstrich nach den mit "http: //" verknüpften URLs haben muss. 'um meine Erweiterungslogik aufzurufen. – Aristotle

34

Wenn Sie jede URL übereinstimmen soll, dann hat Google ein spezielles Muster nur für diesen Zweck: <all_urls>

Verwendungsbeispiel:

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

Diese Seite anzeigen für weitere Informationen: https://developer.chrome.com/extensions/match_patterns

+2

Sehr cool, das hatte ich nicht gewusst. Für diejenigen, die jedoch nach der relevanten Dokumentation suchen, lautet der Link: http://code.google.com/chrome/extensions/match_patterns.html – npdoty

+2

Alle Links zu code.google.com in der gewählten Antwort und alle Kommentare davor sind nach einer Site Reorganisation gebrochen. Ich habe die gewählte Antwort selbst mit funktionierenden Links korrigiert. – ack

2

Für viele, die Fehler bekommen mit:

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

oder

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

Der Versuch, das Ausfüllen oder erstellen, benötigt, um die Matches Feld mit Ihren spezifischen URL. Wenn Sie alle URLs verwenden möchten, verwenden Sie das Tag <all_urls> wie unten.

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

Dateien im "js" Array aufgelistet müssen Sie App ihren Weg relativ. Mit anderen Worten, der Speicherort von "manifest.json" ist Ihr Stammverzeichnis.

Hinweis: jquery.js ist eine Datei in meinem Projektverzeichnis und Sie sollten sie mit der gewünschten Skriptdatei ersetzen.

Verwandte Themen