Edition for Web Developers — Last Updated 19 September 2024
この標準は、文書シーケンスをグループ化するためのいくつかの関連する概念を含む。簡潔で非規範的な要約として:
ナビゲート可能は、文書シーケンスのユーザー向けの表現である。つまり、文書間をナビゲートできるものを表す。典型的な例は、ウェブブラウザーのタブ、ウィンドウ、iframe
などがある。
横断可能なナビゲート可能は、それ自体およびその子孫ナビゲート可能のセッション履歴を制御するナビゲート可能の特殊なタイプである。つまり、自身の文書シーケンスに加えて、それ以上の文書シーケンスのツリーを表し、さらにこのツリーのフラット化されたビューを前後に直線的にトラバースする能力を表す。
ブラウジングコンテキストは、開発者向けの文書シーケンスの表現である。ブラウジングコンテキストは、WindowProxy
オブジェクトと1:1で対応する。それぞれのナビゲート可能は、一連のブラウジングコンテキストを提示することができ、特定の明確に定義された状況下で発生するそれらのブラウジングコンテキスト間のスイッチを伴う。
この標準の大部分はナビゲート可能の言語で動作するが、特定のAPIはブラウジングコンテキストスイッチの存在を公開するため、標準の一部はブラウジングコンテキストの観点から動作する必要がある。
ナビゲート可能は、アクティブなセッション履歴エントリーを介して、Document
をユーザーに提示する。各ナビゲート可能は、以下を持つ:
id、新しい一意の内部値。
親。ナビゲート可能、またはnull。
現在のセッション履歴エントリー、セッション履歴エントリー。
これは、親横断可能なナビゲート可能のセッション履歴横断可能キュー内でのみ変更できる。
アクティブなセッション履歴エントリー、セッション履歴エントリー。
これは、アクティブなセッション履歴エントリーの文書のイベントループからのみ変更できる。
is closingブール値。最初はfalse。
これは、トップレベルの通過可能なナビゲート可能に対してのみtrueに設定される。
is delayingload
イベントをブール値。最初はfalseである。
これは、ナビゲート可能な親がnullでない場合にのみtrueに設定される。
現在のセッション履歴エントリーとアクティブなセッション履歴エントリーは通常同じであるが、次の場合には同期しなくなる。
同期ナビゲーションが実行される。これは、アクティブなセッション履歴エントリーが一時的に現在のセッション履歴エントリーの前に移動を引き起こす。
履歴ステップを適用するときに、表示不可能でエラーのない応答が受信される。これは、現在のセッション履歴エントリーが更新されるが、アクティブなセッション履歴エントリーはそのままとなる。
ナビゲート可能のアクティブ文書は、そのアクティブなセッション履歴エントリーの文書である。
これは、ナビゲート可能の最上位のトラバース可能のセッション履歴トラバースキュー内から安全に読み取ることができる。ナビゲート可能のアクティブな履歴エントリーは同期的に変更できるが、新しいエントリーは常に同じDocument
が含まれる。
ナビゲート可能のアクティブなブラウジングコンテキストは、そのアクティブな文書のブラウジングコンテキストである。このナビゲート可能が横断可能なナビゲート可能である場合、そのアクティブなブラウジングコンテキストはトップレベルのブラウジングコンテキストになる。
ナビゲート可能のアクティブなWindowProxy
は、そのアクティブなブラウジングコンテキストの関連付けられたWindowProxy
である。
ナビゲート可能のアクティブなウィンドウは、そのアクティブなWindowProxy
の[[Window]]である。
これは常に、ナビゲート可能のアクティブな文書の関連するグローバルオブジェクトと等しくなる。これは、アクティブにするアルゴリズムによって同期が保たれる。
ナビゲート可能のターゲット名は、そのアクティブなセッション履歴エントリーの文書状態のナビゲート可能ターゲット名である。
To get the node navigable of a node node, return the navigable whose active document is node's node document, or null if there is no such navigable.
To initialize the navigable navigable navigable, given a document state documentState and an optional navigable-or-null parent (default null):
Let entry be a new session history entry, with
The caller of this algorithm is responsible for initializing entry's step; it will be left as "pending
" until that is complete.
Set navigable's current session history entry to entry.
Set navigable's active session history entry to entry.
Set navigable's parent to parent.
横断可能なナビゲート可能はナビゲート可能であり、それ自身およびその子孫ナビゲート可能に対して、どのセッション履歴エントリーが現在のセッション履歴エントリーおよびアクティブなセッション履歴エントリーであるべきかを制御する。
ナビゲート可能のプロパティに加えて、横断可能なナビゲート可能は次を持つ:
現在のセッション履歴ステップ、数値、最初は0。
セッション履歴エントリー、セッション履歴エントリーのリスト、最初は新しいリスト。
セッション履歴横断キュー、セッション履歴横断パラレルキュー、新しいセッション履歴横断パラレルキューを開始した結果。
実行中のネストされた適用履歴ステップブール値。最初はfalse。
システム可視性の状態、これは"hidden
"か"visible
"かのいずれかである。
この項目の要件については、ページの可視性の節を参照のこと。
To get the traversable navigable of a navigable inputNavigable:
Let navigable be inputNavigable.
While navigable is not a traversable navigable, set navigable to navigable's parent.
Return navigable.
A top-level traversable is a traversable navigable with a null parent.
Currently, all traversable navigables are top-level traversables. Future proposals envision introducing non-top-level traversables.
A user agent holds a top-level traversable set (a set of top-level traversables). These are typically presented to the user in the form of browser windows or browser tabs.
To get the top-level traversable of a navigable inputNavigable:
Let navigable be inputNavigable.
While navigable's parent is not null, set navigable to navigable's parent.
Return navigable.
To create a new top-level traversable given a browsing context-or-null opener, a string targetName, and an optional navigable openerNavigableForWebDriver:
Let document be null.
If opener is null, then set document to the second return value of creating a new top-level browsing context and document.
Otherwise, set document to the second return value of creating a new auxiliary browsing context and document given opener.
Let documentState be a new document state, with
Let traversable be a new traversable navigable.
Initialize the navigable traversable given documentState.
Let initialHistoryEntry be traversable's active session history entry.
Set initialHistoryEntry's step to 0.
Append initialHistoryEntry to traversable's session history entries.
If opener is non-null, then legacy-clone a traversable storage shed given opener's top-level traversable and traversable. [STORAGE]
Append traversable to the user agent's top-level traversable set.
Invoke WebDriver BiDi navigable created with traversable and openerNavigableForWebDriver.
Return traversable.
To create a fresh top-level traversable given a URL initialNavigationURL and an optional POST resource-or-null initialNavigationPostResource (default null):
Let traversable be the result of creating a new top-level traversable given null and the empty string.
Navigate traversable to initialNavigationURL using traversable's active document, with documentResource set to initialNavigationPostResource.
We treat these initial navigations as traversable navigating itself, which will ensure all relevant security checks pass.
Return traversable.
Certain elements (for example, iframe
elements) can present a navigable to the user. These elements are called navigable containers.
Each navigable container has a content navigable, which is either a navigable or null. 最初はnullである。
The container of a navigable navigable is the navigable container whose content navigable is navigable, or null if there is no such element.
The container document of a navigable navigable is the result of running these steps:
If navigable's container is null, then return null.
Return navigable's container's node document.
This is equal to navigable's container's shadow-including root as navigable's container has to be connected.
The container document of a Document
document is the result of running these steps:
If document's node navigable is null, then return null.
Return document's node navigable's container document.
A navigable navigable is a child navigable of another navigable potentialParent when navigable's parent is potentialParent. We can also just say that a navigable "is a child navigable", which means that its parent is non-null.
All child navigables are the content navigable of their container.
The content document of a navigable container container is the result of running these steps:
If container's content navigable is null, then return null.
Let document be container's content navigable's active document.
documentを返す。
The content window of a navigable container container is the result of running these steps:
If container's content navigable is null, then return null.
Return container's content navigable's active WindowProxy
's object.
To create a new child navigable, given an element element:
Let parentNavigable be element's node navigable.
Let group be element's node document's browsing context's top-level browsing context's group.
Let browsingContext and document be the result of creating a new browsing context and document given element's node document, element, and group.
Let targetName be null.
If element has a name
content attribute, then set targetName to the value of that attribute.
Let documentState be a new document state, with
Let navigable be a new navigable.
Initialize the navigable navigable given documentState and parentNavigable.
Set element's content navigable to navigable.
Let historyEntry be navigable's active session history entry.
Let traversable be parentNavigable's traversable navigable.
Append the following session history traversal steps to traversable:
Let parentDocState be parentNavigable's active session history entry's document state.
Let parentNavigableEntries be the result of getting session history entries for parentNavigable.
Let targetStepSHE be the first session history entry in parentNavigableEntries whose document state equals parentDocState.
Let nestedHistory be a new nested history whose id is navigable's id and entries list is « historyEntry ».
Append nestedHistory to parentDocState's nested histories.
Update for navigable creation/destruction given traversable.
Invoke WebDriver BiDi navigable created with traversable.
A useful method for visualizing sequences of documents, and in particular navigables and their session history entries, is the Jake diagram. A typical Jake diagram is the following:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
top | /t-a | /t-a#foo | /t-b | ||
frames[0] | /i-0-a | /i-0-b | |||
frames[1] | /i-1-a | /i-1-b |
Here, each numbered column denotes a possible value for the traversable's session history step. Each labeled row depicts a navigable, as it transitions between different URLs and documents. The first, labeled top
, being the top-level traversable, and the others being child navigables. The documents are given by the background color of each cell, with a new background color indicating a new document in that navigable. The URLs are given by the text content of the cells; usually they are given as relative URLs for brevity, unless a cross-origin case is specifically under investigation. A given navigable might not exist at a given step, in which case the corresponding cells are empty. The bold-italic step number depicts the current session history step of the traversable, and all cells with bold-italic URLs represent the current session history entry for that row's navigable.
Thus, the above Jake diagram depicts the following sequence of events:
A top-level traversable is created, starting a the URL /t-a
, with two child navigables starting at /i-0-a
and /i-1-a
respectively.
The first child navigable is navigated to another document, with URL /i-0-b
.
The second child navigable is navigated to another document, with URL /i-1-b
.
The top-level traversable is navigated to the same document, updating its URL to /t-a#foo
.
The top-level traversable is navigated to another document, with URL /t-b
. (Notice how this document, of course, does not carry over the old document's child navigables.)
The traversable was traversed by a delta of −3, back to step 1.
Jake diagrams are a powerful tool for visualizing the interactions of multiple navigables, navigations, and traversals. They cannot capture every possible interaction — for example, they only work with a single level of nesting — but we will have ocassion to use them to illustrate several complex situations throughout this standard.
Jake diagrams are named after their creator, the inimitable Jake Archibald.
It is often helpful in this standard's algorithms to look at collections of navigables starting at a given Document
. This section contains a curated set of algorithms for collecting those navigables.
The return values of these algorithms are ordered so that parents appears before their children. Callers rely on this ordering.
Starting with a Document
, rather than a navigable, is generally better because it makes the caller cognizant of whether they are starting with a fully active Document
or not. Although non-fully active Document
s do have ancestor and descendant navigables, they often behave as if they don't (e.g., in the window.parent
getter).
The ancestor navigables of a Document
document are given by these steps:
Let navigable be document's node navigable's parent.
Let ancestors be an empty list.
While navigable is not null:
Return ancestors.
The inclusive ancestor navigables of a Document
document are given by these steps:
Let navigables be document's ancestor navigables.
Append document's node navigable to navigables.
Return navigables.
The descendant navigables of a Document
document are given by these steps:
Let navigables be new list.
Let navigableContainers be a list of all shadow-including descendants of document that are navigable containers, in shadow-including tree order.
For each navigableContainer of navigableContainers:
If navigableContainer's content navigable is null, then continue.
Extend navigables with navigableContainer's content navigable's active document's inclusive descendant navigables.
Return navigables.
The inclusive descendant navigables of a Document
document are given by these steps:
Let navigables be « document's node navigable ».
Extend navigables with document's descendant navigables.
Return navigables.
These descendant-collecting algorithms are described as looking at the DOM tree of descendant Document
objects. In reality, this is often not feasible since the DOM tree can be in another process from the caller of the algorithm. Instead, implementations generally replicate the appropriate trees across processes.
The document-tree child navigables of a Document
document are given by these steps:
If document's node navigable is null, then return the empty list.
Let navigables be new list.
Let navigableContainers be a list of all descendants of document that are navigable containers, in tree order.
For each navigableContainer of navigableContainers:
If navigableContainer's content navigable is null, then continue.
Append navigableContainer's content navigable to navigables.
Return navigables.
To destroy a child navigable given a navigable container container:
Let navigable be container's content navigable.
If navigable is null, then return.
Set container's content navigable to null.
Inform the navigation API about child navigable destruction given navigable.
Destroy a document and its descendants given navigable's active document.
Let parentDocState be container's node navigable's active session history entry's document state.
Remove the nested history from parentDocState's nested histories whose id equals navigable's id.
Let traversable be container's node navigable's traversable navigable.
Append the following session history traversal steps to traversable:
Update for navigable creation/destruction given traversable.
Invoke WebDriver BiDi navigable destroyed with navigable.
To destroy a top-level traversable given a top-level traversable traversable:
Let browsingContext be traversable's active browsing context.
For each historyEntry in traversable's session history entries in what order?:
Let document be historyEntry's document.
If document is not null, then destroy a document and its descendants given document.
Remove browsingContext.
Remove traversable from the user interface (e.g., close or hide its tab in a tabbed browser).
Remove traversable from the user agent's top-level traversable set.
Invoke WebDriver BiDi navigable destroyed with traversable.
User agents may destroy a top-level traversable at any time (typically, in response to user requests).
To close a top-level traversable traversable:
If traversable's is closing is true, then return.
Let toUnload be traversable's active document's inclusive descendant navigables.
If the result of checking if unloading is canceled for toUnload is true, then return.
Append the following session history traversal steps to traversable:
Let afterAllUnloads be an algorithm step which destroys traversable.
Unload a document and its descendants given traversable's active document, null, and afterAllUnloads.
ナビゲート可能は、ターゲット名を指定できる。これは、特定のAPI(window.open()
、a
要素のtarget
属性など)が、そのナビゲート可能でナビゲーションを目標にできるようにする文字列である。
A valid navigable target name is any string with at least one character that does not contain both an ASCII tab or newline and a U+003C (<), and it does not start with a U+005F (_). (Names starting with a U+005F (_) are reserved for special keywords.)
妥当なナビゲート可能名またはキーワードは、妥当なナビゲート可能なターゲット名またはASCII大文字・小文字不区別で_blank
、_self
、_parent
、または_top
の1つに一致するいずれかとなる任意の文字列である。
これらの値は、以下の(非規範的な)テーブルで要約されるように、ページがサンドボックス化されるかどうかに基づいて異なる意味を持つ。この表において、"current"はリンクまたはスクリプト内にあるナビゲート可能を意味し、"parent"はリンクまたはスクリプト内にあるナビゲート可能の親を意味し、"top"はリンクまたはスクリプトにあるナビゲート可能のトップレベルのトラバース可能を意味し、"new"は、nullの親をもつ新しいトラバース可能を意味し(これはさまざまなユーザー設定とユーザーエージェントポリシーに従って、補助ブラウジングコンテキストを使用できる)、"none"は何も起こらないことを意味し、"maybe new"は"、"allow-popups
"キーワードがsandbox
属性でも指定される場合(またはユーザーがサンドボックスを上書きした場合)に"new"と同じであり、そうでなければ"none"と同じである。
キーワード | 普通の効果 | iframe での効果 | |
---|---|---|---|
sandbox="" | sandbox="allow-top-navigation" | ||
リンクおよびフォーム送信に対して、何も指定しない | current | current | current |
空文字列 | current | current | current |
_blank | new | maybe new | maybe new |
_self | current | current | current |
親が存在しない場合の_parent | current | current | current |
親がまたトップである場合の_parent | parent/top | none | parent/top |
存在するがトップでない場合の_parent | parent | none | none |
トップが現在である場合の_top | current | current | current |
トップが現在でない場合の_top | top | none | top |
名前が存在しない | new | maybe new | maybe new |
名前が存在しかつ子孫である | specified descendant | specified descendant | specified descendant |
名前が存在し現在である | current | current | current |
名前が存在しかつトップとなる祖先である | specified ancestor | none | specified ancestor/top |
名前が存在しかつトップでない祖先である | specified ancestor | none | none |
他の名前が共通のトップとともに存在する | specified | none | none |
familiarかつある許可されたサンドボックス化されたナビゲーターである場合、異なるトップをもつ名前が存在する | specified | specified | specified |
familiarだがある許可されたサンドボックス化されたナビゲーターでない場合、異なるトップをもつ名前が存在する | specified | none | none |
familiarでない、異なるトップをもつ名前が存在する | new | maybe new | maybe new |
サンドボックス化されたブラウジングコンテキストの制限のほとんどは、他のアルゴリズムにより適用される。たとえば、下記で与えられるナビゲート可能を選択するための規則でなく、ナビゲーションアルゴリズムとして。
The rules for choosing a navigable, given a string name, a navigable currentNavigable, and a boolean noopener are as follows:
Let chosen be null.
Let windowType be "existing or none
".
Let sandboxingFlagSet be currentNavigable's active document's active sandboxing flag set.
If name is the empty string or an ASCII case-insensitive match for "_self
", then set chosen to currentNavigable.
Otherwise, if name is an ASCII case-insensitive match for "_parent
", set chosen to currentNavigable's parent, if any, and currentNavigable otherwise.
Otherwise, if name is an ASCII case-insensitive match for "_top
", set chosen to currentNavigable's traversable navigable.
Otherwise, if name is not an ASCII case-insensitive match for "_blank
", there exists a navigable whose target name is the same as name, currentNavigable's active browsing context is familiar with that navigable's active browsing context, and the user agent determines that the two browsing contexts are related enough that it is ok if they reach each other, set chosen to that navigable. If there are multiple matching navigables, the user agent should pick one in some arbitrary consistent manner, such as the most recently opened, most recently focused, or more closely related, and set chosen to it.
This will be made more precise in issue #313.
Otherwise, a new top-level traversable is being requested, and what happens depends on the user agent's configuration and abilities — it is determined by the rules given for the first applicable option from the following list:
The user agent may inform the user that a popup has been blocked.
The user agent may report to a developer console that a popup has been blocked.
Set windowType to "new and unrestricted
".
Let currentDocument be currentNavigable's active document.
If currentDocument's opener policy's value is "same-origin
" or "same-origin-plus-COEP
", and currentDocument's origin is not same origin with currentDocument's relevant settings object's top-level origin, then:
Set noopener to true.
Set name to "_blank
".
Set windowType to "new with no opener
".
In the presence of an opener policy, nested documents that are cross-origin with their top-level browsing context's active document always set noopener to true.
Let chosen be null.
Let targetName be the empty string.
If name is not an ASCII case-insensitive match for "_blank
", then set targetName to name.
If noopener is true, then set chosen to the result of creating a new top-level traversable given null, targetName, and currentNavigable.
Otherwise:
Set chosen to the result of creating a new top-level traversable given currentNavigable's active browsing context, targetName, and currentNavigable.
If sandboxingFlagSet's sandboxed navigation browsing context flag is set, then set chosen's active browsing context's one permitted sandboxed navigator to currentNavigable's active browsing context.
If sandboxingFlagSet's sandbox propagates to auxiliary browsing contexts flag is set, then all the flags that are set in sandboxingFlagSet must be set in chosen's active browsing context's popup sandboxing flag set.
If the newly created navigable chosen is immediately navigated, then the navigation will be done as a "replace
" navigation.
Set chosen to currentNavigable.
Do nothing.
User agents are encouraged to provide a way for users to configure the user agent to always choose currentNavigable.
Return chosen and windowType.
ブラウジングコンテキストは、一連の文書をプログラムで表現したものであり、その複数の文書が1つのナビゲート可能を受け入れることができる。各ブラウジングコンテキストは、対応するWindowProxy
オブジェクトだけでなく、次のオブジェクトを持つ:
オープナーブラウジングコンテキスト、ブラウジングコンテキストまたはnull、最初はnull。
作成時のオープナー生成元、生成元またはnull、最初はnull。
ポップアップ真偽値、最初はfalse。
この仕様での唯一の必須の影響はポップアップであり、関連するBarProp
オブジェクトのvisible
ゲッターにある。しかし、ユーザーエージェントは、ユーザーインターフェイスの考慮事項のためにこれも使用するかもしれない。
補助的真偽値、最初はfalse。
初期URL、URLまたはnull、最初はnull。
仮想参照コンテキストグループID整数。最初は0。This is used by opener policy reporting, to keep track of the browsing context group switches that would have happened if the report-only policy had been enforced.
ブラウジングコンテキストのアクティブウィンドウは、その WindowProxy
オブジェクトの[[Window]]内部スロット値である。ブラウジングコンテキストのアクティブ文書は、そのアクティブウィンドウに関連付けられたDocument
である。
ブラウジングコンテキストのトップレベルトラバース可能は、そのアクティブ文書のノードナビゲート可能のトップレベルトラバース可能である。
補助がtrueであるブラウジングコンテキストは、補助ブラウジングコンテキストとして知られる。補助ブラウジングコンテキストは常にトップレベルブラウジングコンテキストである。
独立した補助的であるという概念が必要かどうかは定かでない。issue#5680では、オープナーブラウジングコンテキストがnullかどうかを使用することで、これを単純化できる可能性があることが示されている。
近頃の仕様では、ブラウジングコンテキストグループスイッチおよびエージェントクラスタ割り当ての微妙な問題を処理していない限り、ほとんどの場合、ブラウジングコンテキストの概念の使用を避けるべできである。代わりに、Document
およびナビゲート可能の概念がたいていより適切である。
Document
のブラウジングコンテキストは、ブラウジングコンテキストまたはnullであり。最初はnullである。
Document
は、必ずしも非nullのブラウジングコンテキストを持つとは限らない。具体的には、データマイニングツールはブラウジングコンテキストをインスタンス化できないだろう。createDocument()
のような API を使用して作成されたDocument
は、非nullのブラウジングコンテキストを持つことはない。また、iframe
要素に対してもともと作成されたDocument
、これは文書から削除されるが、そのブラウジングコンテキストはnull outであるため、関連付けられたブラウジングコンテキストを持たない。
一般に、Document
オブジェクトが非nullブラウジングコンテキストを持っている限り、Window
オブジェクトからDocument
オブジェクトへのマッピングは1対1になる。例外が1つある。Window
は、マッピングが1対2になるように、同じブラウジングコンテキストで2番目のDocument
のプレゼンテーションに再利用できる。これは、ブラウジングコンテキストが、最初のabout:blank
Document
から別の文書にナビゲートされたときに発生する。これは置換で行われる。
To create a new browsing context and document, given null or a Document
object creator, null or an element embedder, and a browsing context group group:
Let browsingContext be a new browsing context.
Let unsafeContextCreationTime be the unsafe shared current time.
Let creatorOrigin be null.
Let creatorBaseURL be null.
If creator is non-null, then:
Set creatorOrigin to creator's origin.
Set creatorBaseURL to creator's document base URL.
Set browsingContext's virtual browsing context group ID to creator's browsing context's top-level browsing context's virtual browsing context group ID.
Let sandboxFlags be the result of determining the creation sandboxing flags given browsingContext and embedder.
Let origin be the result of determining the origin given about:blank
, sandboxFlags, and creatorOrigin.
Let permissionsPolicy be the result of creating a permissions policy given embedder and origin. [PERMISSIONSPOLICY]
Let agent be the result of obtaining a similar-origin window agent given origin, group, and false.
Let realm execution context be the result of creating a new realm given agent and the following customizations:
For the global object, create a new Window
object.
For the global this binding, use browsingContext's WindowProxy
object.
Let topLevelCreationURL be about:blank
if embedder is null; otherwise embedder's relevant settings object's top-level creation URL.
Let topLevelOrigin be origin if embedder is null; otherwise embedder's relevant settings object's top-level origin.
Set up a window environment settings object with about:blank
, realm execution context, null, topLevelCreationURL, and topLevelOrigin.
Let loadTimingInfo be a new document load timing info with its navigation start time set to the result of calling coarsen time with unsafeContextCreationTime and the new environment settings object's cross-origin isolated capability.
Let document be a new Document
, with:
html
"text/html
"quirks
"about:blank
If creator is non-null, then:
Set document's referrer to the serialization of creator's URL.
Set document's policy container to a clone of creator's policy container.
If creator's origin is same origin with creator's relevant settings object's top-level origin, then set document's opener policy to creator's browsing context's top-level browsing context's active document's opener policy.
Assert: document's URL and document's relevant settings object's creation URL are about:blank
.
Mark document as ready for post-load tasks.
Populate with html
/head
/body
given document.
Make active document.
Completely finish loading document.
Return browsingContext and document.
To create a new top-level browsing context and document:
Let group and document be the result of creating a new browsing context group and document.
Return group's browsing context set[0] and document.
To create a new auxiliary browsing context and document, given a browsing context opener:
Let openerTopLevelBrowsingContext be opener's top-level traversable's active browsing context.
Let group be openerTopLevelBrowsingContext's group.
Assert: group is non-null, as navigating invokes this directly.
Let browsingContext and document be the result of creating a new browsing context and document with opener's active document, null, and group.
Set browsingContext's is auxiliary to true.
Append browsingContext to group.
Set browsingContext's opener browsing context to opener.
Set browsingContext's virtual browsing context group ID to openerTopLevelBrowsingContext's virtual browsing context group ID.
Set browsingContext's opener origin at creation to opener's active document's origin.
Return browsingContext and document.
To determine the origin, given a URL url, a sandboxing flag set sandboxFlags, and an origin-or-null sourceOrigin:
If sandboxFlags has its sandboxed origin browsing context flag set, then return a new opaque origin.
If url is null, then return a new opaque origin.
If url is about:srcdoc
, then:
Assert: sourceOrigin is non-null.
Return sourceOrigin.
If url matches about:blank
and sourceOrigin is non-null, then return sourceOrigin.
Return url's origin.
The cases that return sourceOrigin result in two Document
s that end up with the same underlying origin, meaning that document.domain
affects both.
A browsing context potentialDescendant is said to be an ancestor of a browsing context potentialAncestor if the following algorithm returns true:
Let potentialDescendantDocument be potentialDescendant's active document.
If potentialDescendantDocument is not fully active, then return false.
Let ancestorBCs be the list obtained by taking the browsing context of the active document of each member of potentialDescendantDocument's ancestor navigables.
If ancestorBCs contains potentialAncestor, then return true.
falseを返す。
A top-level browsing context is a browsing context whose active document's node navigable is a traversable navigable.
It is not required to be a top-level traversable.
The top-level browsing context of a browsing context start is the result of the following algorithm:
If start's active document is not fully active, then return null.
Let navigable be start's active document's node navigable.
While navigable's parent is not null, set navigable to navigable's parent.
Return navigable's active browsing context.
A browsing context A is familiar with a second browsing context B if the following algorithm returns true:
If A's active document's origin is same origin with B's active document's origin, then return true.
If A's top-level browsing context is B, then return true.
If B is an auxiliary browsing context and A is familiar with B's opener browsing context, then return true.
If there exists an ancestor browsing context of B whose active document has the same origin as the active document of A, then return true.
This includes the case where A is an ancestor browsing context of B.
falseを返す。
A top-level browsing context has an associated group (null or a browsing context group). 最初はnullである。
A user agent holds a browsing context group set (a set of browsing context groups).
A browsing context group holds a browsing context set (a set of top-level browsing contexts).
A top-level browsing context is added to the group when the group is created. All subsequent top-level browsing contexts added to the group will be auxiliary browsing contexts.
A browsing context group has an associated agent cluster map (a weak map of agent cluster keys to agent clusters). User agents are responsible for collecting agent clusters when it is deemed that nothing can access them anymore.
A browsing context group has an associated historical agent cluster key map, which is a map of origins to agent cluster keys. This map is used to ensure the consistency of the origin-keyed agent clusters feature by recording what agent cluster keys were previously used for a given origin.
The historical agent cluster key map only ever gains entries over the lifetime of the browsing context group.
A browsing context group has a cross-origin isolation mode, which is a cross-origin isolation mode. It is initially "none
".
A cross-origin isolation mode is one of three possible values: "none
", "logical
", or "concrete
".
"logical
" and "concrete
" are similar. They are both used for browsing context groups where:
every top-level Document
has `Cross-Origin-Opener-Policy: same-origin
`, and
every Document
has a `Cross-Origin-Embedder-Policy
` header whose value is compatible with cross-origin isolation.
On some platforms, it is difficult to provide the security properties required to grant safe access to the APIs gated by the cross-origin isolated capability. As a result, only "concrete
" can grant access that capability. "logical
" is used on platform not supporting this capability, where various restrictions imposed by cross-origin isolation will still apply, but the capability is not granted.
To create a new browsing context group and document:
Let group be a new browsing context group.
Append group to the user agent's browsing context group set.
Let browsingContext and document be the result of creating a new browsing context and document with null, null, and group.
Append browsingContext to group.
Return group and document.
To append a top-level browsing context browsingContext to a browsing context group group:
Append browsingContext to group's browsing context set.
Set browsingContext's group to group.
To remove a top-level browsing context browsingContext:
Let group be browsingContext's group.
Set browsingContext's group to null.
Remove browsingContext from group's browsing context set.
If group's browsing context set is empty, then remove group from the user agent's browsing context group set.
Append and remove are primitive operations that help define the lifetime of a browsing context group. They are called by higher-level creation and destruction operations for Document
s and browsing contexts.
When there are no Document
objects whose browsing context equals a given browsing context (i.e., all such Document
s have been destroyed), and that browsing context's WindowProxy
is eligible for garbage collection, then the browsing context will never be accessed again. If it is a top-level browsing context, then at this point the user agent must remove it.
dがナビゲート可能navigableのアクティブな文書であり、navigableが最上位のトラバース可能であるか、navigableのコンテナー文書が完全にアクティブである場合、Document
dは完全にアクティブであるといわれる。
これらは要素に関連付けられているため、子ナビゲート可能は常に、親ナビゲート可能内の特定のDocument
(コンテナー文書)に関連付けられている。ユーザーエージェントは、コンテナー文書自体が完全にアクティブではない子ナビゲート可能とユーザーが対話することを許可してはならない。
次の例は、Document
が、完全にアクティブではない一方で、ノードナビゲート可能のアクティブな文書になる方法を示す。ここで、a.html
はブラウザーのウィンドウに読み込まれ、b-1.html
は示されているように最初にiframe
に読み込まれ、b-2.html
およびc.html
は省略される(単に空の文書にすることができる)。
<!-- a.html -->
<!DOCTYPE html>
< html lang = "en" >
< title > Navigable A</ title >
< iframe src = "b-1.html" ></ iframe >
< button onclick = "frames[0].location.href = 'b-2.html'" > Click me</ button >
<!-- b-1.html -->
<!DOCTYPE html>
< html lang = "en" >
< title > Navigable B</ title >
< iframe src = "c.html" ></ iframe >
この時点で、a.html
、b-1.html
、およびc.html
によって提供される文書はすべて、それぞれのノードナビゲート可能のアクティブな文書である。それらはまた、すべて完全にアクティブである。
button
をクリックし、b-2.html
からナビゲート可能Bに新しいDocument
をロードする後に、次の結果が得られる: