2012-06-26 86 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