在阅读各种JavaScript API的规范时,您可能会遇到这样的要求:文档在使用之前必须是“完全活动的”。下面是规范中的含义的定义:https://html.spec.whatwg.org/multipage/browsers.html#fully-active
目前尚不清楚的是如何知道文档是否完全处于活动状态。例如,WakeLock API要求文档是完全活动的。如果文档没有完全激活,那么调用"WakeLock.request()“将拒绝带有"NotAllowedError”错误对象的返回承诺。但是,它可能返回"NotAllowedError“而没有指定在给定情况下的原因。
因此,在尝试使用需要文档的API之前,我如何主动地确定文档是否完全处于活动状态?
发布于 2021-08-24 16:22:35
页面中有一个部分:https://html.spec.whatwg.org/multipage/browsers.html#active-document
当d的浏览上下文为非空时,d的浏览上下文的活动文档为d,并且d的浏览上下文是顶级的浏览上下文,或者d的浏览上下文的容器文档是完全活动的,则文档d被称为完全活动的。
面对你的问题:
因此,在尝试使用需要
的APIs之前,如何主动地确定文档是否完全处于活动状态()?
让我们扩展一下规则:
。
我认为可以将其转换为javascript代码,但我不能100%肯定:
function isFullyActive(s /* self */) {
return s.window !== null
&& s.document === s.window.document
&& (s.window.top === s.window || isFullyActive(s.window.parent));
}
// you can use in this way on a top level javascript:
isFullyActive(self)我没有找到任何关于事件或方法的API/spec来检查文档是否完全处于活动状态。
参考文献:
浏览器上下文:How to access "browsing context" in JavaScript?
https://stackoverflow.com/questions/68909643
复制相似问题