2010-09-15 3 views
14

Предположим, у меня есть файл JSON, хранящийся в моем расширении, который называется settings.json. Я могу получить URL файла с помощью:Загрузка актива, хранящегося в расширении chrome

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

Но теперь, когда у меня есть URL, как я на самом деле загрузить содержимое этого файла, так что я могу JSON.parse и использовать его? Причина, по которой я делаю это, заключается в том, что есть серверный компонент, и я хочу упростить развертывание и тестирование на нескольких серверах (dev, staging, production и т. Д.). Альтернативно, если есть способ добавить пользовательские атрибуты в манифест. json и получить доступ к ним, что также сработает.

ответ

24

Если вы сделаете ваши setting.js выглядеть следующим образом:

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

Тогда вы можете просто включить его на фоне страницы и параметры использования переменной:

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

Если вы хотите иметь чистый JSON в вашем файле, не присваивая его никаким переменным, вы можете загрузить его с помощью XMLHttpRequest:

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

или если вы включили JQuery в свой проект:

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

(кстати, используя chrome.extension.getURL требуется только при обращении к файлу из скрипта содержимого, в противном случае вы можете просто использовать относительный путь /config_resources/config.json)

+1

Я могу в конечном итоге сделать первое предложение. Во втором случае я получаю следующую ошибку (изнутри скрипта содержимого): XMLHttpRequest не может загрузить chrome-extension: // /settings.json. Запросы на кросс-начало поддерживаются только для HTTP. Ошибка при сборе: NETWORK_ERR: Исключение XMLHttpRequest 101 – Evan

+0

@Evan Хорошо, тогда я ошибся в скрипте содержимого, извините. Если вам это нужно в скрипте содержимого, вы можете отправить запрос на фоновый рисунок с помощью 'chrome.extension.sendRequest' и попросить его получить настройки для вас (вам нужно будет отправить запрос в любом случае, даже с помощью первого метода). – serg

2

я могу убедитесь, что запрос ресурса из XHR на фоновом режиме работает так, как описано выше. Просто не забудьте добавить «я» к части connect-src вашего content_security_policy.

+0

Следует также рассмотреть еще один вопрос: web_accessible_resources https://stackoverflow.com/a/14236129/742884 –

Смежные вопросы