How to get Worker () to work with a cross-domain?

I tried to hack BeSpin, trying to get it working on my CDN, and I missed the XHR cross-domain request for the topic. without conversion to use JSONP. The next problem I am facing is a new working one (js_file) where js_file is in a different domain.

How to enable / enable cross-domain work for Worker ()?

Can I give the worker the source code directly? (ie build a super large JavaScript file with another file embedded in it) [this is not ideal, but it should work].

+3
source share
2 answers

try the following:

  • create function with working code
  • (.toString), . .
  • BlobBuilder (window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder)
  • getBlob(), blob
  • URL (window.URL || window.webkitURL), URL- using createObjectURL
  • URL

function getUrlForWorker(workerFunction) {
    var BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder,
    URL = window.URL || window.webkitURL,
        mainString = workerFunction.toString(),
        bodyString     = mainString.substring( mainString.indexOf("{")+1, mainString.lastIndexOf("}") ),
        bb = new BlobBuilder()

    bb.append(bodyString)

    return URL.createObjectURL(bb.getBlob())
}
+2

- , " "....

, cdn, , new Worker('at.yourCDN.com/worker.js'). SharedWorker, . , , . , Service/Server.

: Worker()/SHaredWorker(), .

, :

  • SharedWorker(), CDN ://protocol.
  • , iframe.
  • iframe, - /iframe script DOM, , .

: /, , myWindow.postMessage('my message'), myWindow port.postMessage(myMsg) .

, , , .

, "Forever Server" CORS, iframe-injection window.postMessageing.

.

************************************ EDIT ************************************

, , SharedWorker, , - SharedWorker . , , , FileReader API:

// DOM:

<b>1</b>
<input id="uploadImage" type="file" name="myPhoto" onchange="onSelect();" autofocus="true" />
<script>
var fReader = new FileReader();
fReader.onload = function(e){
  var blob = new Blob([e.target.result], {type: 'text/javascript'});
  var blobURL = URL.createObjectURL(blob);
  var w = new SharedWorker(blobURL);
  w.port.onmessage = function(e){
    console.log('%%^', e);
  };
  w.port.start();
  w.port.postMessage('Echo');
};
function onSelect(e){
  var file = document.getElementById("uploadImage").files[0];
  var dataURL = fReader.readAsText(file);
}
</script>

// DESKTOP:

var ports = ports || [];
self.onconnect = function(e){
  var port = e.ports[0];
  ports.push(port);

  port.addEventListener('message', function(e){
    port = e.target;
    ports.forEach(function(p){
      p.postMessage('gWorker:: ' + e.data);
    });
  }, false);

  port.start();
};

:

CDN-Worker, , FileReader/BlobBuilder, "" worker object heap. , CORS, CORS XMLHttpRequest, new Worker('http://from.mycors.com/enabled/server') "DOM Exception 18" SecurityError, .

"Window-Proxy" (iframe.postMessage() iframe , window.onmessage ). : -, http, window.postMessage http.

, google-chrome --allow-file-access-from-files - .

- WebRTC, .

, .

,

0

Source: https://habr.com/ru/post/1779711/


All Articles