概念
- browsing context : 浏览器环境,是 展示给用户的 Document 所在的环境。
- 浏览器的 tab 或者 window 窗口,以及 iframe 和
frameset
中的frame
都有一个这样的环境。 - 每个 browsing context 都有一个对应
- 的关联的 WindowProxy 对象。
- 每个 browsing context 有自己的 session history ,包含了 browsing context 所含有的 Document.
- browsing context 的 active document 是他的 WindowProxy 的内部 Window 插槽的关联文档 associated Document.
- 如果一个 browsing context 的 session history 中包含了某个 Document ,那么他就是该 Document 的 browsing context.
- 浏览器的 tab 或者 window 窗口,以及 iframe 和
- WindowProxy : 这是一个包含了 window 对象的特异对象。当 browsing context 被导航时,browsing context 的关联 windowProxy 所包含的 window 也随之发生变化
- 每个 windowProxy 都有一个内部的插槽( [[Window]] internal slot ),用来呈现 window 对象。
- 一般而言,一个 window 有一个 Document, 但是当在一个窗口中进行了导航时,window 到 document 的映射变为
1 to many
。当 使用了document.open()
打开了新的 window 后,映射变为many to 1
. - 注意: 根据我的理解,这里的 Document 并非和某个 html 文件等价。而是作为其包含对象。也就是说,如果某个 html 文件变了,但是页面没有刷新,那么其包含 Document 对象依然没有变。
- Nested browsing contexts : 一些特定的元素(比如:
iframe
)能初始化更多的 browsing context, 这些元素被称为 browsing context containers。
他们有一个Nested browsing contexts 属性,其值为 browsing context 或者 null - Auxiliary browsing contexts : 可以创建一个新的 top-level browsing context (比如通过
document.open()
)。这样也会随之创建新的 window 对象.新创建的 window 对象 有一个opener
属性,用于指向创建他的 browsing context 的 WindowProxy.
一般来说,会将新创建的 window 的opener
属性设置为 null, 不然新的 window 中的脚本可以通过window.opener
取得之前的 window ,并对其做出更改。
属性
- window . top : 返回最顶级的 top-level browsing context 的 WindowProxy 对象
- window . parent : 返回当前 browsing context 的 parent browsing context 的 WindowProxy 对象。
- window.frameElement : 返回作为当前页面的browsing context 的 browsing context container 的 Element. 例如: 某个页面在 iframe 中打开,则在其中的 js 代码中使用
window.frameElement
,就能获取到父页面的iframe
元素。