Подтвердить что ты не робот

Создайте веб-исполнителя из содержимого расширения Chrome script

Я пытаюсь создать веб-рабочего из моего содержимого расширения script, но он блокируется SecurityError (такая же политика происхождения). Какой лучший способ сделать это?

Из моего контента script:

var workerURL = chrome.extension.getURL("js/searchWorker.js");
var lunrWorker = new Worker(workerURL);

Из манифеста:

"content_scripts": [
   {
     "matches": ["http://localhost:8000/*"],
     "js": ["js/jquery.min.js", "js/jquery.highlight.js", "js/index.js"],
     "css": ["css/bootstrap.css", "css/styles.css"]
   }
 ]

Я также попытался установить это в своем манифесте, но это не помогло:

"content_security_policy": "default-src 'none'; style-src 'self'; script-src 'self';",

(Sidenote: CSS не вводится на страницу, я не уверен, что это симптом той же проблемы или несвязанный)

4b9b3361

Ответ 1

http://crbug.com/357664 - это сообщение об ошибке, не позволяющее загружать сценарии расширения в качестве веб-рабочего.

Обходной путь к этой проблеме - загрузить рабочий script с помощью XMLHttpRequest, затем загрузить рабочего из строки. Когда я столкнулся с этой проблемой в прошлом, я создал оболочку, которая прозрачно изменяет конструктор Worker, поэтому вы можете без проблем использовать new Worker(chrome.runtime.getURL('worker.js')).

См. patch-worker.js (документация) для реализации предыдущей идеи.

patch-worker.js имеет некоторые ограничения (например, importScripts работает не так, как ожидалось), в основном связанный с тем, что он не запускается в chrome-extension: -origin. Чтобы решить эти проблемы, я создал другую библиотеку, которая использует iframe для создания Рабочего. См. worker_proxy для исходного кода и документации.