2010-8-8 update:在IE8下的eval是不支持下面两种的用法的,很杯具,都会提示“对象不支持此属性或方法”的错误。 [javascript] //第一: eval("onmessage=function(str){alert(str);}"); onmessage("shllo"); //第二: var s = document.createElement("script"),h=document.getElementsByTagName("head")[0]; s.text="onmessage=function(str){alert(str);}"; h.appendChild(s); onmessage("hello"); [/javascript] 说到这个,还发现一点很容易造成失误的地方:在浏览器解析过的script中的代码,浏览器不会重新对该script标签内的行内脚本、外联脚本执行,就算是重新给script标签定义行内脚本或者修改它的src来链接到其他的javascript脚本,浏览器都不会重新解析。 ——————- 提IE8 eval的兼容性分界线 ——————– … 了解更多
2010-8-7 update:很悲剧的发现,Web Worker不支持跨域调用js文件。同时,经过测试,发现在Worker进程中的onmessage函数不能使用function onmessage(){}这种方式来声明,否则chrome、safari、opera不能执行它,切记~(实现Worker,FF比chrome、opera、safari兼容性好多了) 如果你使用window.onmessage=function(){}来声明onmessage方法,FF、Chrome等都提示window未定义的错误,这就很奇怪撂。难道Worker进程中不存在window这个对象? —————————– 更新分界线 —————————— javascript单线程任务式的运行代码,这是大家普遍都知道的事情,有时候为了模拟多线程,会使用setTimeout/setInterval的方式,但是这个并不能解决实质的问题。Web Worker — javascript的“多核”时代来了! Worker也已经出现的比较早了,记得当初首先是在Mozilla网站看到关于它的语法和特点介绍,今天在逛Opera看到了关于它的说明文档:Web Workers rise up!。觉得来详细的分析下它的原理是很有必要的了。下面是我对它的一点点看法: Web Worker的基本原理就是在当前javascript的主线程中,使用Worker类来独辟一个新的线程,来处理外联的一个javascript文件,起到互不阻塞执行的效果,并且提供主线程和新线程之间数据交换的接口:postMessage,onmessage。而它的数据交换方式有点类似于Ajax的异步请求,都是浏览器“暗地里”传输的。下面是我分析之后得出的一个流程图: