爲什麼我一直收到此錯誤?未捕獲的ReferenceError:未定義importScripts
我應該可以使用這個全局函數嗎?
http://www.html5rocks.com/en/tutorials/workers/basics/
我使用鉻。
我使用https://code.google.com/p/bitjs/並將其與
importScripts('io.js');
importScripts('archive.js');
爲什麼我一直收到此錯誤?未捕獲的ReferenceError:未定義importScripts
我應該可以使用這個全局函數嗎?
http://www.html5rocks.com/en/tutorials/workers/basics/
我使用鉻。
我使用https://code.google.com/p/bitjs/並將其與
importScripts('io.js');
importScripts('archive.js');
此代碼需要一個工人腳本中開始。工作人員本身是通過一個新的Worker
對象創建的 - 請參閱Getting Started in the tutorial。
您鏈接的代碼位於創建者here內。
我也遇到了這個錯誤。就我而言,這是因爲我正在使用Karma/Jasmine測試代碼。由於測試框架,worker.js文件也由主線程加載。
if('undefined' === typeof window){
importScripts('workerscript2.js');
...
}
請參考下面的評論羅布,它提供了一個可選的解決方案:
我用wrappig的worker.js文件避免這個錯誤。
這是在使用Jasmine時巧妙的解決方法。 +1 – Liam
請考慮使用''function'=== typeof importScripts'。 –
當您創建一個工人時,它實際上會執行兩次。第一遍是在全局「窗口」對象的上下文中(意味着您可以訪問所有窗口對象函數)。第二次調用是在具有不同全局對象的worker的上下文中,其中存在'importScripts'。
// proper initialization
if('function' === typeof importScripts) {
importScripts('script2.js');
addEventListener('message', onMessage);
function onMessage(e) {
// do some work here
}
}
注意addEventListener在if語句中。如果你把它放在它外面,你的回調將被註冊兩次。一旦進入全球「窗口」,一旦進入全球工作人員。
快樂編碼!
你的回答很有意義。你能否指點一些鏈接來更多地瞭解兩次執行。 – lokeshjain2008
你如何培育工人? – Bergi
以爲這會產生一個工人?這是他們在https://code.google.com/p/bitjs/source/browse/unzip.js中的使用方式 – netigger
不,這需要在工作人員腳本中。請參閱https://code.google.com/p/bitjs/source/browse/archive.js#278關於他們如何操作的信息,或者按照您鏈接的教程 – Bergi