2010-10-25 35 views
17

找到答案我的一些問題,html5 web工作者!!!javascript web workers - 我如何傳遞參數?

儘管使用這個基本的例子,我該如何將一個參數傳遞給web worker? worker.js的

內容:

function doSomething() { 
    postMessage(' done'); 
} 
setTimeout ("doSomething()", 3000); 

JS代碼:

var worker = new Worker('worker.js'); 
    worker.onmessage = function (event) { 
    alert(event.data); 
    }; 
+0

使用setTimeout像這樣:'setTimeout(doSomething,3000);'這是更好的,因爲沒有額外的評估...... – 2010-10-25 22:10:30

+0

https://developer.mozilla.org/En/Using_web_workers – epascarello 2010-10-25 22:48:36

回答

25

正如你可以看到你有兩個工人到主主對工人的消息相同的機制。

  • 用於發送消息
  • onmessage構件用於限定接收消息

在主腳本處理程序的postMessage方法:

worker.postMessage(data); 

在工人腳本:

self.addEventListener("message", function(e) { 
    // the passed-in data is available via e.data 
}, false); 

...或只是...

onmessage = function(e) { 
    // the passed-in data is available via e.data 
}; 

這可能是因爲數據必須是一個字符串...(火狐3.5及以上版本支持在JSON兼容的對象傳遞)

+2

完美謝謝! – Joe 2010-10-25 22:29:54

+5

@Joe我很高興有人在那裏實際使用IE中未實現的新功能:) – 2010-10-25 22:36:51

+0

什麼是自我?在self.addEventListener中? – 2014-02-25 16:22:59

0
var worker = new Worker(window.App.baseUrl + '/Scripts/signature/GetCurrenProductWorker.js'); 
        worker.postMessage(window.App.baseUrl) 


    var _base_url = '' 
     var xhr = new XMLHttpRequest(); 
     onmessage = function (e) { 
      _base_url = e.data 
      xhr.open("GET", _base_url + "/api/product/Get"); 
      xhr.onload = function() { 
       postMessage(xhr.responseText); 
      }; 
      xhr.send(); 

     }; 

這對我的工作