2011-04-26 149 views
0

可能有人能告訴我爲什麼我的網絡工作者不起作用? 我畫了一個運行良好的動畫畫布。但是當我通過文本框調整它的大小時,它會停止運行,直到執行JavaScript。現在,我創建一名工作人員來承擔調整圖形大小的任務,而不會停止畫布的移動。我希望它更新隱藏字段的值,通過取值的文本框,轉換爲字符串,然後將結果以隱藏字段的值。爲此,我製作了文件。我的意思是在HTML標記中沒有JavaScript代碼。代碼文件如下網絡工作者不起作用

/* Code that will be run by the worker */ 

function applyChanges(radius, size) { 
    return radius + "," + size; 
} 

/* 
    Add an event listener to the worker, this will be called when  
    the worker receives a message from the main page. 
*/ 
this.onmessage = function (event) { 
    var data = event.data; 

    // Message sent by the worker to the main page. 
    postMessage(applyChanges(data.radius, data.size)); 
} 

/* Worker's code */ 

// Create a new worker 
var myWorker = new Worker("C:\applications\bb\scripts\setValues.js"); 
/* 
    Add a event listener to the worker, this will be called whenever the worker posts any message. 
*/ 
myWorker.onmessage = function (event) { 
    document.getElementById().value = event.data; 
}; 

// Register events for button. 
document.getElementById("button").onclick = function() { 
    var circle = document.getElementById("tcircle"); 
    var square = document.getElementById("tsquare"); 
    var radius = circle.value; 
    var size = square.value; 

    // check if those are numerics 
    if (!isNaN(radius) && !isNaN(size)) { 
     // verify that the won't hide more the 1/4 of the circle. 
     if (radius >= size/Math.SQRT2) { 
      // since we are going to test scrolling and zooming, we are not going to set max values of radius and size. 

      message = { "tcircle": radius, "tsize": size }; 

      // Message sent by the main page to the worker. 
      myWorker.postMessage(message); 

     } 
     else { 
      alert("The radius must not be less that: size/sqrt(2)"); 
     } 
    } 
    else { 
     alert("Required numeric type!"); 
    } 
} 

// Terminate the worker. 
myWorker.terminate(); 
+0

請縮進代碼4個空格以便正確格式。你可以使用編輯器中的按鈕 – mpen 2011-04-26 00:30:22

回答

3

Web Workers是不能訪問其主機環境的異步JavaScript處理環境:DOM。在網絡工作者,你可以卸載激烈的算法,數學計算,但您無法訪問表單元素,更改或訪問DOM,我也相信你不能產卵Ajax請求。

+0

謝謝Eli。那麼如何在不停止畫布運動的情況下更新隱藏字段的值呢? – miaf 2011-04-27 11:18:31

0

已經有更新到Chrome瀏覽器怎麼現在允許可以幫助解決這個問題。

在此基礎上的答案,使用Chrome可以傳遞數據返回給工人,然後將它寫回畫布,所以其他人可以遵循,但至少這是一種方式繼續與您的測試。

Web Workers and Canvas

你可能想看看這個演示如何工作,以得到一個想法,你可以用WebWorkerCanvas做什麼。

http://www.robodesign.ro/coding/html5-demo-video-histogram/index-web-worker.html

+0

謝謝詹姆斯。該應用程序將運行在黑莓手機上。所以我的主要問題是如何獲取輸入文本的值,然後將這些值發送到隱藏字段。這是一種方法嗎? – miaf 2011-04-27 11:24:31

+0

爲什麼不停止webworker時有變化,然後開始新的一個新值。它在javascript中會很快,所以用戶不應該看到任何改變。 – 2011-04-27 21:18:22

+0

我輸了。我有運行的例子。我無法理解我的運行情況。我減少了代碼,但沒有。如果你不看我的話。 – miaf 2011-05-01 01:10:06