【发布时间】:2019-11-19 01:48:04
【问题描述】:
我正在尝试使用服务工作者文件,它也是一个 ESM 模块。
register 方法有一个额外的参数,接受一个 options 对象,该对象有一个 type 字段,其有效值似乎是 classic 和 module,但是当我使用时:
navigator.serviceWorker.register('worker.js', { type: 'module' });
// `worker.mjs` doesn't work either
// The file exists in both cases!
我在 Chrome 中收到一个未指定的 DOMException,但没有消息。
通过阅读规范,我知道type 的有效值是什么,特别是:
https://html.spec.whatwg.org/multipage/workers.html#workertype
在我看来,我的代码是有效的。
作为健全性检查,我还尝试将type 显式设置为classic,然后服务工作人员注册顺利进行。如果我将其设置为无效值,我会得到一个 TypeError 告诉我,所以浏览器并不知道 type: module。它被视为一种特殊情况,它只是抛出一个DOMException 而没有任何消息。
我是否正确使用了type 字段?是不是还太早了,浏览器还不支持?
【问题讨论】:
-
.mjs是 Node.js 的东西,而不是 Node.js 之外的 ESM 东西。 (而且 Node.js 现在有type。希望.mjs会死掉......) -
什么版本的 Chrome?你的 service worker 脚本的内容有什么不同吗?