我正在尝试在Firefox中的共享Web Worker中使用EventSource
(服务器已发送事件)。当我尝试在共享工作器中的消息事件中尝试使用EventSource构造函数时,工作程序抛出错误ReferenceError: EventSource is not defined.
我认为这意味着无法在Shared Web Workers上下文中访问此对象,但我可以从Google Chrome中的共享Web Worker中访问EventSource。 我想明确表示,如果直接在脚本中使用,我可以毫无问题地使用EventSource
,我只是在Firefox内的共享Web工作室内创建和使用它时遇到问题。
查看它所说的EventSource spec in Section 4:
当脚本的全局对象是Window对象或实现WorkerUtils接口的对象时,此构造函数必须可见。
但是查看指定的Web Workers spec in Section 5接口有一个 WorkerUtils接口。
interface WorkerGlobalScope : EventTarget {
readonly attribute WorkerGlobalScope self;
readonly attribute WorkerLocation location;
void close();
[TreatNonCallableAsNull] attribute Function? onerror;
[TreatNonCallableAsNull] attribute Function? onoffline;
[TreatNonCallableAsNull] attribute Function? ononline;
};
WorkerGlobalScope implements WorkerUtils;
我原以为我可以根据两个规范中提到的信息,使用self.EventSource
或者只是EventSource
从工作者中访问EventSource。然而,在Firefox的实践中似乎并非如此。
我无法从Firefox访问共享Web Worker中的EventSource吗?
我想使用Shared Web Worker for EventSource(推送事件),因为用户可以从相关网站打开多个选项卡,我想避免让浏览器打开与主机的多个EventSource连接。
我应该使用另一种方法吗?不幸的是,Web套接字不是我在ASP.net 2上开发的选项。
感谢您的时间。
答案 0 :(得分:1)
此错误已在Firefox Nightly中修复,并在Firefox 53中附带:
我已将EventSource暴露给专职工作人员和共享工作人员。
其他浏览器引擎是否实现此功能? 据我所知,Chrome支持专用工作者,共享工作者和服务工作者。 Safari在专职工作者中支持它。 Edge不支持它。
将EventSource公开给ServiceWorker: 目前没有针对服务工作者的计划,因为正在讨论一个未解决的问题https://github.com/w3c/ServiceWorker/issues/947。
<强>参考强>