Document.defaultView返回null的场景及关联属性问题咨询
MDN对Document.defaultView的描述如下:
在浏览器中,document.defaultView返回与当前文档关联的window对象,若无可用关联对象则返回null。
针对你提出的三个问题,具体解答如下:
1. 「无可用关联对象」对应的具体场景
常见场景有四类:
- 纯内存创建、未挂载到任何浏览上下文的文档:比如通过
DOMImplementation.createDocument()、DOMParser.parseFromString()生成的文档,没有嵌入到页面进行渲染的前提下,不会关联任何window对象,返回值为null - 已销毁浏览上下文对应的旧文档:比如页面中的iframe被从DOM树移除、或者iframe完成页面跳转后,原来的旧文档对应的浏览上下文已经被销毁,此时访问旧文档的
defaultView就会返回null - 非浏览器的模拟DOM环境:比如Node.js端使用的jsdom、cheerio等DOM模拟库,如果没有手动配置模拟window上下文,生成的document对象的
defaultView默认就是null - 未嵌入浏览上下文的资源类文档:比如作为纯资源加载的SVG文档、XML数据文档,没有通过iframe、embed等标签嵌入页面渲染时,也不会关联window对象
2. 是否存在与window对象detached(分离)的document对象
存在。
上一问题中提到的内存创建未挂载的文档、已销毁上下文对应的旧文档都属于这类分离状态的document。这类对象可以正常执行DOM查询、节点增删改等常规操作,但是因为没有绑定浏览上下文,所以无法访问window、location等全局对象,也无法触发页面渲染相关的逻辑。
3. 是否存在没有关联document对象的window对象
常规前端开发场景下不存在。
window对象本身是浏览上下文的全局对象,每一个浏览上下文在初始化时就会同步创建对应的document对象,哪怕是空白的about:blank页面也有完整的document实例。只有浏览器内部的调试上下文、特殊特权级的扩展运行上下文这类前端开发者完全接触不到的场景下,才可能出现例外,日常开发不需要考虑这种情况。
内容的提问来源于stack exchange,提问作者khcpietro
相关产品推荐
相关产品推荐

