You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:07:04