2012-06-26 65 views
4

Can I load a web worker script from an absolute URL? - 这里的答案是否定的。Web Worker加载绝对URL

然而,有一个黑客,我发现反正做到这一点:

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完成工人。另一种选择是与内联工作者一起工作,但这更加丑陋,因为那样我就不得不将所有的代码放到一个巨大的字符串中。

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

回答

2

您已经发现了Web Workers的一个聪明特性 - 您可以创建几乎任何任意文本blob。

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

+1

谢谢。唯一的问题是我认为它比较慢。该代码将在额外的RTT后运行以获取脚本。我不喜欢优化浏览器。 – whadar