2011-04-26 66 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