如何通过package:web在Dart Web Worker中访问WorkerGlobalScope
在package:web中替代dart:html的WorkerGlobalScope.instance
在package:web里,WorkerGlobalScope是对Worker环境全局对象self的扩展,而非独立类,所以不需要通过.instance获取实例,直接使用全局的self对象即可实现原有的功能。
具体用法
在Web Worker的Dart代码中:
- 原来通过
WorkerGlobalScope.instance调用的方法/属性,直接替换为self.xxx即可。 self在Worker环境中本身就是WorkerGlobalScope的实例,所有扩展的成员都可以直接访问。
代码对比
旧的dart:html写法
import 'dart:html'; void main() { // 发送消息到主线程 WorkerGlobalScope.instance.postMessage('Worker ready'); // 访问Worker的location属性 print(WorkerGlobalScope.instance.location.href); }
新的package:web写法
import 'package:web/web.dart'; void main() { // 直接用self调用postMessage self.postMessage('Worker ready'); // 直接通过self访问location print(self.location.href); }
额外说明
如果需要区分Worker类型(比如专用Worker、共享Worker),可以直接判断self的类型:
if (self is DedicatedWorkerGlobalScope) { // 处理专用Worker的逻辑 } else if (self is SharedWorkerGlobalScope) { // 处理共享Worker的逻辑 }
内容的提问来源于stack exchange,提问作者andynewman
相关产品推荐
相关产品推荐

