20180208-讀HTML規範
概念
- 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.
- 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
元素。