Я разрабатываю библиотеку, которую хочу разместить на CDN. Библиотека будет использоваться во многих разных доменах на нескольких серверах. Сама библиотека содержит один script (назовем его script.js), который загружает веб-рабочего (worker.js).
Загрузка самой библиотеки довольно проста: просто добавьте тег <script type="text/javascript" src="http://cdn.mydomain.com/script.js"></script>
в домен, в котором я хочу использовать библиотеку (www.myotherdomain.com). Однако, поскольку библиотека загружает работника из http://cdn.mydomain.com/worker.js new Worker('http://cdn.mydomain.com/worker.js')
, я получаю SecurityException. CORS включен на cdn.mydomain.com.
Для веб-работников не разрешается использовать веб-исполнителя в удаленном домене. Использование CORS не поможет: браузеры, похоже, игнорируют его и даже не выполняют проверку предполета.
Для этого нужно выполнить XMLHttpRequest, чтобы получить источник рабочего, а затем создать URL-адрес BLOB и создать рабочего, используя этот URL-адрес. Это работает для Firefox и Chrome. Однако это не работает для Internet Explorer или Opera.
Решение состоит в том, чтобы разместить работника на www.myotherdomain.com или разместить прокси файл (который просто загружает работника из cdn с помощью XHR или importScripts). Мне не нравится это решение: мне нужно разместить дополнительные файлы на сервере, и поскольку библиотека используется на нескольких серверах, обновление будет затруднено.
Мой вопрос состоит из двух партов:
- Возможно ли иметь работника в удаленном источнике для IE 10 +?
- Если это так, как лучше всего работать с кросс-браузером?