【发布时间】:2016-11-21 16:59:55
【问题描述】:
我正在使用带有 javascript 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));
在浏览器中我收到 CORS 错误。为什么 webworker 需要 CORS?我已经仔细检查过了。网络工作者导致 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
});
}
没有成功。我能做什么?
【问题讨论】:
-
“在浏览器中我得到了 CORS 错误”——错误信息是什么意思?
-
@Quentin,我已经用错误消息更新了问题。
-
错误消息说你不能从
blob:协议发出跨域请求...听起来有点奇怪,但解决方法是使用 FileReader,将你的 blob 转换为 dataURI 版本并从此 dataURI 启动您的工作人员。根据消息,data:URI 方案被允许做这样的请求。 -
Ps:如果它真的有效,你甚至不需要 Blob 和 FileReader:只需对你的脚本内容进行编码(使用 encodeURIComponent)并通过在编码字符串前面加上
data:text/plain; encoding=utf8,来创建 URI。 -
PPs:刚刚在 FF 50 和 chrome 54 上尝试过,两者都适用于
blob:协议...
标签: javascript node.js browserify web-worker