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

What does the error "Failed to register a ServiceWorker: The document is in an invalid state." mean?

我正在尝试从像这样动态创建的 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 包含注册服务工作者的代码(来自 google 文档的 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 中写入。