Firefox共享Web工作者中的服务器发送事件

时间:2014-08-11 00:55:55

标签: html5 firefox web-worker server-sent-events

我正在尝试在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上开发的选项。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

此错误已在Firefox Nightly中修复,并在Firefox 53中附带:

  

我已将EventSource暴露给专职工作人员和共享工作人员。

     

其他浏览器引擎是否实现此功能?   据我所知,Chrome支持专用工作者,共享工作者和服务工作者。 Safari在专职工作者中支持它。 Edge不支持它。

     

将EventSource公开给ServiceWorker:   目前没有针对服务工作者的计划,因为正在讨论一个未解决的问题https://github.com/w3c/ServiceWorker/issues/947

<强>参考