So erstellen Sie einen Web Worker aus einer Zeichenfolge
Wie kann ich erstellen Sie eine Web-worker aus einem string (geliefert wird per POST-request)?
Einer Weise, die ich an denken kann, aber ich bin mir nicht sicher, wie es zu implementieren, wird durch das erstellen einer data-URI aus der server-Antwort, und die übergabe, zu der Arbeiter-Konstruktor, aber ich habe gehört, dass einige Browser erlauben es nicht, weil der same-origin-policy.
MDN-Staaten die Unsicherheit über die Herkunft Politik rund um data-URI ' s:
Hinweis: Die URI als parameter übergeben, von der Arbeiter-Konstruktor muss gehorchen den gleichen Ursprung Richtlinie. Derzeit gibt es Uneinigkeit unter den Browser-Anbietern an, ob die data URIs sind von der gleichen Ursprungs sind oder nicht, Gecko 10.0 (Firefox 10.0 /Thunderbird 10.0) und später machen Sie es ermöglichen, Daten-URIs als gültiges Skript für die Arbeiter. Andere Browser möglicherweise nicht einverstanden sind.
Hier ist auch eine post diskutieren Sie auf der whatwg.
InformationsquelleAutor der Frage bigblind | 2012-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
URL.createObjectURL(< - Blob-blob - >)
können verwendet werden zum erstellen eines Web-worker aus einem string. Der blob kann erstellt werden mit derBlobBuilder
API veraltet oder dieBlob
constructor.Demo: http://jsfiddle.net/uqcFM/49/
Kompatibilität
Web-worker sind von den folgenden Browsern unterstützt Quelle:
Diese Methode der Unterstützung ist auf der Grundlage der Unterstützung der
Blob
- API und dieURL.createObjectUrl
Methode.Blob
Kompatibilität:WebKitBlobBuilder
), 20+ (Blob
Konstruktor)MozBlobBuilder
), 13+ (Blob
Konstruktor)Blob
Konstruktor)IE10 unterstützt
MSBlobBuilder
undURL.createObjectURL
. Jedoch, versuchen, um eine Web-Worker von einemblob:
-URL eine SecurityError.Opera 12 nicht unterstützt
URL
API. Einige Benutzer haben vielleicht eine gefälschte version desURL
Objekt, Dank dieser hack inbrowser.js
.Fallback 1: data-URI
Opera unterstützt Daten-URIs, die als argument an die
Worker
Konstruktor. Hinweis: vergessen Sie nicht, spezielle escape-Zeichen (wie#
und%
).Demo: http://jsfiddle.net/uqcFM/37/
Fallback 2: Eval
eval
kann als fallback verwendet werden, für Safari (<6) und IE 10.InformationsquelleAutor der Antwort Rob W
Stimme ich mit die aktuelle akzeptierte Antwort, aber oft Bearbeiten und verwalten von worker-code wird hektisch als in form eines Strings.
Also Optional können wir die unten nähern, wo wir halten können, der Arbeiter als eine Funktion, und dann covert string->blob:
Dieser wird geprüft, IE11+ und FF und Chrome
InformationsquelleAutor der Antwort Chanakya Vadla
Ich habe einen Ansatz, der mit den meisten Ihrer Ideen und Sie, einige von mir. Das einzige, was mein code muss auf Arbeiter ist für die Verwendung von 'dieser' zu finden, selbst ' Umfang. Ich bin mir ziemlich sicher, dass dies sehr verbesserungsfähig:
Demo: http://jsfiddle.net/8N6aR/
InformationsquelleAutor der Antwort lukelalo
Nette Antwort - ich habe ein ähnliches problem, heute beim Versuch zum erstellen von Web-worker mit fallback-Funktionen, wenn Sie nicht verfügbar (D. H. laufen worker-Skript in der Haupt-thread). Als dieser thread bezieht sich auf das Thema, ich dachte, ich würde meine Lösung hier:
InformationsquelleAutor der Antwort Chris GW Green
Abhängig von Ihrem Anwendungsfall können Sie so etwas wie
Ein Beispiel wäre
InformationsquelleAutor der Antwort Chad Scira
Weiter geht ' s mit @Chanu_Sukarno code, können Sie einfach gehen in ein worker-Funktion (oder string) um diese Funktion und führt es in einen web-worker:
Hier ist ein Beispiel, wie es zu benutzen:
In nodejs
doWorkerTask
sieht wie folgt aus:InformationsquelleAutor der Antwort
Erhalten Sie Echtzeit-Daten aus der objectURL und nicht nur blob durch die änderung der
responseType
entweder"text"
oder"arraybuffer"
.Hier ist ein hin-und her-Konvertierung von
text/javascript
zublob
zuobjectURL
zurückblob
odertext/javascript
.wenn Sie neugierig sind, ich verwende es zum generieren einer web-worker mit keine externen Dateien
Sie können es verwenden, um zurück binären Inhalt, zum Beispiel ein YouTube-video 😉 (aus den <video> tag Attribut resource)
InformationsquelleAutor der Antwort
Nutzung meiner winzigen plugin https://github.com/zevero/worker-create
Aber Sie können auch geben ihm eine Funktion.
InformationsquelleAutor der Antwort zevero