Кросс-домен Web Worker?
У меня https://domain1.com (domain1) и https://domain2.com (domain2).
Domain2 обслуживает страницу, содержащую javascript с заголовком "Access-Control-Allow-Origin: *"
Domain1 запускает код javascript, который вызывает:
new Worker("//domain2.com/script.js")
Браузеры бросают исключения безопасности.
Начиная с начала написания этого вопроса, я столкнулся с этой проблемой, попробовав скрипт, раскалывая его и запуская с него, но я что-то упустил в оригинальной идее?
Ответы
Ответ 1
У меня также такая же проблема, надеюсь, это поможет вам https://gist.github.com/jtyjty99999/a730a17258fca04bfca3
function XHRWorker(url, ready, scope) {
var oReq = new XMLHttpRequest();
oReq.addEventListener('load', function() {
var worker = new Worker(window.URL.createObjectURL(new Blob([this.responseText])));
if (ready) {
ready.call(scope, worker);
}
}, oReq);
oReq.open("get", url, true);
oReq.send();
}
function WorkerStart() {
XHRWorker("http://static.xxx.com/js/worker.js", function(worker) {
worker.postMessage("hello world");
worker.onmessage = function(e) {
console.log(e.data);
}
}, this);
}
WorkerStart();
Ответ 2
Примечание. URI, переданный как параметр конструктора Worker, должен подчиняться политике одного и того же происхождения. В настоящее время существует разногласие между поставщиками браузеров о том, какие URI имеют одно и то же происхождение;...
Цитата из https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers
Рабочий HTML5 является довольно новой концепцией, и я не уверен, что, как XmlHttpRequest
, исключения из-за происхождения применяются, однако, с XmlHttpRequest
, возможно получить доступ к ресурсам в другом домене, если у вас есть контроль над сервером, на котором он работает. Доступ к ресурсам в иностранных доменах осуществляется с помощью предварительно запрограммированных запросов, что означает, что сначала запрос на запрос OPTIONS отправляется на ресурс, и если ответ на него имеет соответствующие заголовки управления доступом (Access-Control-Allow-Methods
, Access-Control-Allow-Origin
как минимум), то запрос повторяется с оригинальным методом и получает ресурс в ответ.
Ответ 3
У вас есть возможность установить методы?
Попробуйте добавить это в свой заголовок:
Access-Control-Allow-Methods: POST, GET, OPTIONS