2015-11-05 70 views
1

我的網絡工作人員在一個小書籤中工作。該代碼與調用代碼位於同一文件夾中,因爲它使用worker.js文件中的importScripts函數進行加載,所以我沒有顯式加載工作代碼。loading bookload

我創建像這樣

if(typeof(Worker) !== "undefined") { 
     worker = new Worker('worker.js'); 
    } 

工人然後我打電話,像這樣

worker.postMessage({'cmd': 'start', 'grabRate': grabRate}); 

工人應該調用該函數在我的工人文件

self.addEventListener('message', function(e) { 
    console.log("worker message"); 
    var data = e.data; 
    switch (data.cmd) { 
    case 'start': 
     console.log("start from worker"); 
... 

我不沒有看到控制檯中的任何調試消息,告訴我'worker'中已經調用了'message'。我只加載調用worker.js的代碼(在小書籤加載器函數中),因爲它是由new Worker函數加載的(如果我還在加載函數中包含了這些文件,我可以看到該文件,但函數仍然沒有被調用)。我無法看到Chrome調試源列表中的工作文件或使用importScripts函數加載的其他文件。

+0

工人對象似乎沒有什麼我看空:。它有一個原型,還有兩個屬性onrorror和onmessage。 –

+1

你在哪裏看到一個空對象?從輸出看來,你似乎得到了常規的WebWorker對象,但沒有任何處理程序現在 – Sirko

+0

Sirko,擱淺的孩子,你的權利,也許我認爲工人尚未裝載尚未成熟,其可能與其他事情有關到郵件不工作,我現在正在調試它們 – ejectamenta

回答

0

問題在於小書籤在其運行頁面的上下文中加載腳本。由於調試器沒有發現錯誤消息,當文件未找到並且工作對象似乎有效時,工作人員無法正常工作的原因並不明顯。爲了解決這個問題,工人被加載這樣

worker = new Worker('//path.to/worker.js'); 

(該//佔HTTPS/HTTP域)