2010-09-15 15 views
14

Załóżmy, że mam plik JSON przechowywany w moim rozszerzeniu o nazwie settings.json. mogę uzyskać adres URL do pliku przy użyciu:Ładowanie zasobu przechowywanego w rozszerzeniu chrome

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

Ale teraz, że mam URL, w jaki sposób właściwie załadować zawartość tego pliku, więc mogę JSON.parse i używać? Powodem, dla którego to robię, jest to, że istnieje komponent serwera i chcę ułatwić wdrażanie i testowanie na wielu serwerach (programowanie, testowanie, produkcja itd.). Alternatywnie, jeśli istnieje sposób na dodanie niestandardowych atrybutów do manifestu. json i dostęp do nich, który również działa.

Odpowiedz

24

Jeśli dokonać setting.js wyglądać następująco:

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

Następnie można po prostu umieścić go na stronie tła i ustawień zastosowania zmiennej:

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

Jeśli chcesz mieć czystego json w pliku bez przypisywania go do wszelkich zmiennych następnie można załadować go za pomocą XMLHttpRequest:

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = handleStateChange; // Implemented elsewhere. 
xhr.open("GET", chrome.extension.getURL('/config_resources/config.json'), true); 
xhr.send(); 

lub jeśli włączone jQuery do projektu:

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

(btw korzystania chrome.extension.getURL jest wymagane tylko w przypadku uzyskania dostępu do pliku ze skryptu zawartości, w przeciwnym razie można po prostu użyć ścieżki względnej /config_resources/config.json)

+1

Mogę skończyć robiąc pierwszą sugestię. Z drugim otrzymuję następujący błąd (z poziomu skryptu treści): XMLHttpRequest nie może załadować rozszerzenia chrome: // /settings.json. Żądania dotyczące różnych źródeł są obsługiwane tylko dla protokołu HTTP. Niepowodzenie Błąd: NETWORK_ERR: XMLHttpRequest Wyjątek 101 – Evan

+0

@ Evan Ok, myliłem się co do skryptu zawartości, przepraszam. Jeśli potrzebujesz tego w skrypcie treści, możesz wysłać żądanie do strony w tle za pomocą 'chrome.extension.sendRequest' i poprosić go, aby uzyskać ustawienia dla ciebie (będziesz musiał wysłać żądanie w każdym przypadku, nawet przy pierwszej metodzie). – serg

2

mogę sprawdź, czy żądanie zasobu z XHR na stronie w tle działa tak, jak opisano wcześniej. Po prostu pamiętaj o dodaniu 'self' do części connect-src swojej content_security_policy.

+0

Należy również rozważyć inny punkt: web_accessible_resources https://stackoverflow.com/a/14236129/742884 –

Powiązane problemy