Worker 是可以在后台运行的任务,它能够被轻松的创建,还能向它的创建者发送消息。 你只要调用 Worker()
构造函数,指定一个需要运行在 worker 线程内的脚本,就能够很容易的创建一个 worker。
一个值得注意的事实是:worker 能够产生出新的 worker,前提是这些 worker 托管于相同的源内来作为它们的父页面。 此外,worker 还能够使用 XMLHttpRequest
实现网络 I/O 操作, 只不过 XMLHttpRequest 上的
responseXML
与 channel
两个属性值始终返回 null。
workder 支持的函数 页面提供了一个 worker 支持的全局函数列表。
如果你想在扩展中使用 worker,并希望能够访问到 js-ctypes, 那么你应该使用 ChromeWorker
对象来代替 worker。
使用 web worker 提供了例子与细节描述。
方法概述
Worker (in DOMString scriptURL) |
|
void terminate(); |
属性
Property | Type | Description |
onmessage |
EventListener |
一个事件监听函数,每当拥有 message 属性的 MessageEvent 从 worker 中冒泡出来时就会执行该函数。事件的 data 属性存有消息内容。 |
onerror |
EventListener |
一个事件监听函数,每当类型为 error 的 ErrorEvent 从 worker 中冒泡出来时就会执行该函数。 |
错误信息对象
错误信息对象包含三个属性:
message
- 一个可读性良好的错误信息。
filename
- 产生错误的脚本文件名。
lineno
- 发生错误时所在的脚本文件行号。
构造函数
Worker()
该构造函数创建一个 web worker,它能执行位于指定 URL 上的脚本。脚本必须遵循 同源策略。 需要注意的是,浏览器制造商对于 data URI 是否需要同源存在分歧。虽然 Gecko 10.0 (Firefox 10.0 / Thunderbird 10.0 / SeaMonkey 2.7) 以及后续版本都接受 data URI,但其他浏览器却并非如此。
Worker( in DOMString aStringURL );
参数
aStringURL
- worker 将要执行的脚本的 URL。它必须遵循同源策略(或是 Gecko 10.0 及后续版本支持的 data URI)。
返回值
一个新的 Worker。
方法
postMessage()
向 worker 的内部作用域内传递消息。该方法接收一个单独的参数,即要传递给 worker 的数据。数据可以是任何值或者是经过结构化拷贝算法处理过的 JavaScript 对象,换句话说,可以包含循环引用。
void postMessage( Object aMessage [, sequence<Transferable> transferList]);
参数
- aMessage
- 传输给 worker 的对象;它将包含于传递给 onmessage 处理函数的事件对象中的 data 字段内。你可以传递任意值或是经过结构化拷贝算法处理过的 JavaScript 对象,即可以包含循环引用。
- transferList
- 一个可选的对象数组,用于转让它们的所有权。如果一个对象的所有权被转让,那么它在原来的上下文内将不可使用,而只能在转让到的 worker 内可用。
- 由规范可知, 只有 MessagePort 与 ArrayBuffers 对象能被转让。
terminate()
立即终止 worker。该方法不会给 worker 留下任何完成操作的机会;就是简单的立即停止。
void terminate();
浏览器兼容性
不同类型的worker兼容度不一致,详细参考具体定义的页面。
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Basic support | 4 | 3.5 | 10.0 | 10.6 | 4 |
Feature | Android | Firefox Mobile (Gecko) | Firefox OS (Gecko) | IE Phone | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | 4.4 | 3.5 | 1.0.1 | 10.0 | 11.5 | 5.1 | ? |