4

我可以从绝对 URL 加载 Web Worker 脚本吗?- 这里的答案是否定的。

然而,无论如何我发现有一个黑客可以做到这一点:

var worker; //= new Worker('http://xyz/FSWorker.js');
var xhr = new XMLHttpRequest();
xhr.open("GET", 'http://xyz/FSWorker.js');
xhr.responseType = 'blob';
xhr.onload = function(e) {
    var blob = this.response;
    worker = new Worker(window.URL.createObjectURL(blob));
    fs_ready(); // do more stuff here
};

xhr.send(null);

我不太喜欢这种方法——我现在必须在 XHR 完成后才开始使用 worker。另一种选择是使用 inline worker,但这更难看,因为我必须将所有代码放入一个巨大的字符串中。

有没有更好的方法来做到这一点?

4

1 回答 1

2

您发现了 Web Workers 的一个巧妙功能——您可以从几乎任何任意文本 blob 创建。

如果您将脚本作为<script>当前页面上的节点加载,您可以使用类似的Blob技术从中创建 Web Worker。至于加载远程脚本,您的依赖XHR与访问远程脚本的文本内容一样优雅。

于 2012-06-26T16:00:32.120 回答