HTML/WHATWG中relevant setting object/realm及Document的[[Realm]]字段疑问
核心概念解释
1. [[Realm]] 字段的来源
[[Realm]] 不属于HTML规范单独为Document接口定义的字段,它是ECMAScript规范中对所有平台对象(即宿主环境提供的、实现了Web IDL接口的对象)要求的内置内部槽。所有Web IDL定义的接口实例(包括Document、Element等所有DOM对象)在创建时都会自动被分配这个内部槽,不需要在HTML的Document接口定义中单独声明。
2. Document 对象的 [[Realm]] 赋值时机
所有Document实例的[[Realm]]槽会在对象创建阶段完成赋值:
- 每一个浏览上下文对应唯一的全局环境,全局环境关联的ECMAScript执行上下文的Realm就是这个
Document所属的Realm - 创建新
Document对象时,会直接将当前浏览上下文关联的Realm赋值给该对象的[[Realm]]内部槽,这个逻辑被包含在Web IDL规范的平台对象创建流程中,不需要在HTML的Document创建流程里重复定义
3. relevant Realm 和 relevant settings object 的关联
- relevant Realm:直接取平台对象
[[Realm]]内部槽的值,代表这个对象所属的脚本执行域,不同Realm之间的全局对象、内置构造函数(如Array、Object)都是相互隔离的 - relevant settings object:每个Realm都会对应一个环境设置对象,存储了该Realm关联的源、创建URL、浏览上下文、API权限策略等宿主相关的配置信息,取对应Realm的环境设置对象即可得到目标对象的relevant settings object
提及的断言逻辑说明
创建新浏览上下文时生成的初始Document是about:blank文档,它的所属Realm的环境设置对象的创建URL默认就是about:blank,和文档本身的初始URL一致,所以才有对应的断言。
内容的提问来源于stack exchange,提问作者Ilya Loskutov
相关产品推荐
相关产品推荐

