Загрузка файла скрипта в песочницу приложения Chrome

Я работаю над приложением Chrome, и у меня есть файл сценария, сохраненный в изолированной файловой системе приложения. (Он доступен по URL-адресу filesystem:chrome-extension_****/Persistent/script.js

Я могу использовать FileSystemAPI Chrome для чтения файла в главном окне приложения. Однако мне нужно, чтобы он был доступен и исполнялся на изолированной странице.

У меня есть следующее в моем манифесте -

"sandbox": {
      "pages": ["sandboxed_page.html"],
      "content_security_policy": "sandbox allow-scripts;"
},

И я использую страницу следующим образом:

<iframe id="sandbox_frame" seamless="seamless" src="sandboxed_page.html" sandbox="allow-scripts"></iframe>

Я попытался загрузить файл в главном окне приложения, использовал window.URL.createObjectURL(), чтобы преобразовать его в большой двоичный объект: URL-адрес, и передал этот URL-адрес через postMessage() в песочницу. В песочнице я пытаюсь загрузить URL-адрес в элемент <script>. Я получаю сообщение об ошибке Not allowed to load local resource: blob:chrome-extension%3A//...

Другой вариант (который работает) — загрузить содержимое script.js в основное приложение и отправить всю строку через postMessage(). Не уверен, что это хорошая идея, так как script.js может стать довольно большим.

Я что-то делаю не так, или загрузка локальных скриптов в песочницах запрещена политиками безопасности Chrome?

Я просмотрел https://developer.chrome.com/apps/app_external, но там нет упоминания отправки внешних ресурсов в песочницу.


person Osiris    schedule 05.10.2014    source источник
comment
Не похоже, что вы установили альтернативный script-src в песочнице CSP, поэтому я думаю, вы можете просто загрузить его через ‹script src=script.js›, как в главном окне?   -  person lossleader    schedule 05.10.2014


Ответы (1)


Страницы в песочнице выполняются в уникальном источнике, т. е. в источнике, отличном от самого приложения, и вы не можете получить доступ к URL-адресам файловой системы из разных источников. То же самое касается URL-адресов объектов, созданных из этих файлов.

Вы в основном застряли с подходом postMessage, хотя вы можете сделать его более эффективным, передав его как ArrayBuffer, а не копируя данные в виде строки. См. https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers#Passing_data_by_transferring_ownership_(transferable_objects).

person kalman    schedule 23.10.2014