CORS问题,使用带有blob的webworker

时间:2016-11-21 16:59:56

标签: javascript node.js browserify web-worker

我正在使用带有javascript blob的webworker,因为我希望能够缩小项目:

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)); 

在浏览器中我收到CORS错误。为什么网络工作者需要CORS?我仔细检查了一下。 webworker导致CORS错误。 chrome和firefox中的错误相同。

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

在开发环境中,我正在使用带有browserfy的节点。我尝试使用npm包'cors';

启用CORS
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
  });
}

没有成功。我该怎么办?

2 个答案:

答案 0 :(得分:-1)

您可以使用heroku应用“ Cors Anywhere”来解决“跨源请求错误”错误, 尚未为网络工作者测试过它,但值得一试。

https://cors-anywhere.herokuapp.com

只需将上面的网址添加到您尝试创建XMLHttpRequest的网址的开头即可,因为我目前仍在学习Node&webworkers自己。.

答案 1 :(得分:-2)

通常CORS请求有一个pre请求,询问是否允许请求。您需要在目标Web服务器域请求中指定此CORS请求。除非您没有这样做,否则CORS请求将无效。这些请求实际上是必需的。

您可以通过添加CORS允许的标头来完成此操作。在nginx或apache中,只需将.htaccess文件添加到该目标文件夹即可。我猜在node.js网络服务器引擎上有一个等价物。祝你好运!