错误"Failed to register a ServiceWorker: The document is in an invalid state."是什么意思?



我正试图从动态创建的iframe注册一个服务工作者,如下所示:

var iframe = document.createElement('iframe');
var html = '
<head><script src="/script.js"></script></head>
<body>Iframe</body>
';
document.body.appendChild(iframe);
iframe.contentWindow.document.open();
iframe.contentWindow.document.write(html);
iframe.contentWindow.document.close();

script.js包含注册服务工作者的代码(来自谷歌文档的texbook示例(。

这会抛出一个错误,称为"Failed to register a ServiceWorker: The document is in an invalid state."

我尝试在iframe的"load"事件处理程序中包含服务工作者注册代码,并添加超时以说明可能在错误时间调用服务工作者注册码,但没有成功。

在Chromium的源代码中,我发现了以下代码,我认为这就是错误的来源:

if (!m_provider) {
resolver->reject(DOMException::create(InvalidStateError, "Failed to register a ServiceWorker: The document is in an invalid state."));
return promise;
}

什么是";该文档处于无效状态";在这种情况下是什么意思?什么是m_provider?为什么它不可用?

这似乎是由Chromium中的一个错误引起的:https://bugs.chromium.org/p/chromium/issues/detail?id=1102209

理想情况下,动态创建的框架将继承在父级上注册的服务工作者,从而完全不需要在iframe的contentWindow中进行写入。

相关内容

  • 没有找到相关文章

最新更新