Загрузка актива, хранящегося в хромовом расширении

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

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

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

Ответы

Ответ 1

Если вы сделаете свой файл settings.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) {
  //..
});

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

Ответ 2

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