2016-11-21 2 views
1

Ich bin ein Webworker mit einem Javascript-Klecks verwenden, da ich das Projekt in der Lage sein wollen minify:CORS Problem, mit Webworker mit Blob

window.URL = window.URL || window.webkitURL; 
       var res = elements.worker.toString(); 
       res = res.substr(res.indexOf("\n")+1,res.length-4-res.indexOf("\n")); 
       console.log(res) 
       var blob; 
       try { 
           blob = new Blob([res], {type: 'application/javascript'}); 
       } catch (e) { // Backwards-compatibility 
           window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; 
           blob = new BlobBuilder(); 
           blob.append(res); 
           blob = blob.getBlob(); 
       } 
       load.workNode = new Worker(URL.createObjectURL(blob));  

im Browser erhalte ich CORS-Fehler. Warum fordert der Webworker CORS? Ich habe es genau überprüft. Der Webworker verursacht den CORS-Fehler. Derselbe Fehler in Chrome und Firefox.

XMLHttpRequest cannot load . Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource. 

In der Dev-Umgebung verwende ich Knoten mit browserfy. Ich habe versucht, CORS dort mit dem npm-Paket 'cors' zu aktivieren;

var cors = require('cors'); 
var proxy = require('./proxy'); 

function browserSyncInit(baseDir, files, browser) { 
    browser = browser === undefined ? 'default' : browser; 

    var routes = null; 
    if(baseDir === paths.src || (util.isArray(baseDir) && baseDir.indexOf(paths.src) !== -1)) { 
    routes = { 
     '/bower_components': 'bower_components' 
    }; 
    } 

    browserSync.instance = browserSync.init(files, { 
    startPath: '/', 
    server: { 
     baseDir: baseDir, 
     middleware: [proxy, cors()], 
     routes: routes 
    }, 
    port: 4000, 
    browser: browser 
    }); 
} 

Kein Erfolg. Was kann ich tun?

+0

"Im Browser bekomme ich CORS-Fehler" - Was sagt die Fehlermeldung? – Quentin

+0

@Quentin, ich habe die Frage mit der Fehlermeldung aktualisiert. – Per

+0

Die Fehlermeldung besagt, dass Sie keine crossOrigin-Anfrage aus dem 'blob:' Protokoll machen können ... klingt irgendwie komisch, aber eine Abhilfe wäre die Verwendung eines FileReaders, die Konvertierung Ihres Blobs in eine DataURI-Version und das Starten Ihres Worker DatenURI. Gemäß der Nachricht kann 'data:' URI Schema solche Anfragen machen. – Kaiido

Antwort

-2

Normalerweise CORS Anfrage haben eine Voranfrage, die fragt, ob die Anfrage erlaubt ist. Sie müssen diese CORS-Anforderung angeben, die auf der Zielwebserver-Domänenanforderung zulässig sein soll. Wenn Sie dies nicht getan haben, funktioniert die CORS-Anfrage nicht. Dies ist im Wesentlichen für diese Anfragen erforderlich.

Sie tun dies, indem Sie die zulässigen CORS-Header hinzufügen. In nginx oder apache können Sie dies tun, indem Sie einfach eine .htaccess-Datei zu diesem Zielordner hinzufügen. Ich denke, es gibt eine Entsprechung auf node.js Web-Server-Engine. Viel Glück!