2010-09-15 3 views
14

Nehmen wir an, ich habe eine JSON-Datei in meiner Erweiterung namens settings.json gespeichert. Ich kann die URL der Datei erhalten mit:Laden eines in einer Chrome-Erweiterung gespeicherten Elements

chrome.extension.getURL("settings.json"); 

Aber jetzt, wo ich die URL haben, wie kann ich laden tatsächlich den Inhalt dieser Datei, so kann ich JSON.parse es und es verwenden? Der Grund dafür ist, dass es eine Serverkomponente gibt, und ich möchte die Bereitstellung und das Testen auf mehreren Servern vereinfachen (Entwicklung, Bereitstellung, Produktion usw.). Alternativ können Sie dem Manifest benutzerdefinierte Attribute hinzufügen. json und auf sie zugreifen, das würde auch funktionieren.

Antwort

24

Wenn Sie Ihren setting.js machen wie folgt aussehen:

var settings = {"param":value,...}; 

Dann können Sie einfach es auf einer Hintergrundseite und Verwendung Einstellungen umfassen Variable:

<script src="settings.js"></script> 

Wenn Sie reine json haben wollen in Ihrer Datei, ohne sie einer Variablen zuzuordnen, können Sie sie mit XMLHttpRequest laden:

oder wenn Sie enthalten jquery in Ihr Projekt:

$.getJSON(chrome.extension.getURL('/config_resources/config.json'), function(settings) { 
    //.. 
}); 

(btw chrome.extension.getURL Verwendung ist nur erforderlich, wenn Sie eine Datei von einem Content-Skript zugreifen, sonst können Sie nur relativen Pfad verwenden /config_resources/config.json)

+1

Ich kann am Ende Ihren ersten Vorschlag machen. Mit dem zweiten bekomme ich den folgenden Fehler (aus einem Inhaltsskript): XMLHttpRequest kann nicht chrome-extension: // /settings.json laden. Cross-Ursprungsanforderungen werden nur für HTTP unterstützt. Uncaught Fehler: NETWORK_ERR: XMLHttpRequest Ausnahme 101 – Evan

+0

@Evan Ok, dann lag ich falsch mit Content-Skript, sorry. Wenn Sie es in einem Inhaltsskript benötigen, können Sie eine Anfrage mit 'chrome.extension.sendRequest' an die Hintergrundseite senden und es anfordern, um Einstellungen für Sie zu erhalten (Sie müssen auf jeden Fall eine Anfrage senden, sogar mit der ersten Methode). – serg

2

ich kann vergewissern Sie sich, dass das Anfordern der Ressource von einem XHR auf der Hintergrundseite wie zuvor beschrieben funktioniert. Stellen Sie sicher, dass Sie "self" zum connect-src Teil Ihrer content_security_policy hinzufügen.

+0

Ein weiterer Punkt sollte ebenfalls berücksichtigt werden: web_accessible_resources https://Stackoverflow.com/a/14236129/742884 –

Verwandte Themen