Кросс-домен 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