ブラウジングコンテキストはDocument
オブジェクトがユーザーに提示される環境である。
iframe
を含むと同様に、ウェブブラウザーにおいてタブやウィンドウは通常、ブラウジングコンテキストを含む。
ブラウジングコンテキストは、対応するWindowProxy
オブジェクトを持つ。
ブラウジングコンテキストは、オープナーブラウジングコンテキストを持ち、これはnullまたはブラウジングコンテキストである最初はnullである。
ブラウジングコンテキストは、不所有の真偽値を持つ。最初はfalseである。
ブラウジングコンテキストは、閉じている真偽値を持つ。最初はfalseである。
次の例は、ブラウジングコンテキストのさまざまな可能性を示している。不所有、閉じている、どちらでもない、または両方である可能性がある。
// Neither disowned nor is closing:
const popup1 = window. open();
// Disowned, but not is closing:
const popup2 = window. open();
popup2. opener = null ;
// Not disowned, but is closing:
const popup3 = window. open();
popup3. close();
// Disowned, is closing:
const popup4 = window. open();
popup4. opener = null ;
popup4. close();
ブラウジングコンテキストは、ブラウジングコンテキストが提示されていた、している、またはするだろうDocument
オブジェクトを一覧表示するセッション履歴を持つ。Document
のブラウジングコンテキストは、そのようなブラウジングコンテキストが存在しかつ破棄されていない場合、セッション履歴にそのDocument
が含まれるブラウジングコンテキストであり、そうでなければnullである。
Document
は、必ずしも非nullのブラウジングコンテキストを持つとは限らない。具体的には、データマイニングツールはブラウジングコンテキストをインスタンス化できないだろう。createDocument()
のような API を使用して作成されたDocument
は、非nullのブラウジングコンテキストを持つことはない。文書から削除されて以来、iframe
要素で当初は作成されたDocument
は、そのブラウジングコンテキストが破棄されたので、関連付けられたブラウジングコンテキストを持たない。
ブラウジングコンテキストのアクティブウィンドウは、その WindowProxy
オブジェクトの[[Window]]内部スロット値である。ブラウジングコンテキストのアクティブ文書は、そのアクティブウィンドウに関連付けられたDocument
である。
一般に、Document
オブジェクトが非nullブラウジングコンテキストを持っている限り、Window
オブジェクトからDocument
オブジェクトへのマッピングは1対1になる。例外が1つある。Window
は、マッピングが1対2になるように、同じブラウジングコンテキストで2番目のDocument
のプレゼンテーションに再利用できる。これは、historyHandlingが"replace
"に設定され、ブラウジングコンテキストが初期about:blank
Document
から別のものにナビゲートしたときに起こる。
ブラウジングコンテキストは、仮想ブラウジングコンテキストグループID整数を持つ。最初は0である。これは、クロスオリジンオープナーポリシーレポートで使用され、レポートのみのポリシーが適用された場合に発生したブラウジングコンテキストグループの切り替えを追跡する。
ブラウジングコンテキストは、初期URLを持ち、これはURLまたはnullである。最初はnullである。
ブラウジングコンテキストは、作成時にオープナーオリジンを持ち。これはオリジンまたはnullである。最初はnullである。
Document
オブジェクトdocumentにブラウジングコンテキストbrowsingContextのアクティブ文書を設定するには、次の手順を実行する:
windowをdocumentの関連するグローバルオブジェクトにする。
documentの可視状態をbrowsingContextのトップレベルブラウジングコンテキストのシステムの可視状態に設定する。
browsingContextのアクティブウィンドウをwindowに設定する。
windowの関連Document
をdocumentに設定する。
windowの関連設定オブジェクトの実行準備フラグを設定する。
ブラウジングコンテキストは、関連付けられている作成者の生成元(nullまたは生成元を返す)、作成者のURL(nullまたはURLを返す)、および作成者のベースURL(nullまたはURLを返す)を持つ。これらは最初はnullである。
特定の要素(たとえば、iframe
要素)は、ブラウジングコンテキストをさらにインスタンス化できる。この要素は、ブラウジングコンテキストコンテナーと呼ばれる。
各ブラウジングコンテキストコンテナーは、ブラウジングコンテキストまたはnullのいずれとなる、ネストされたブラウジングコンテキストを持つ。最初はnullである。
ブラウジングコンテキストbcのコンテナーは、ネストされたブラウジングコンテキストがbcであるブラウジングコンテキストコンテナーであり、そのような要素がない場合はnullである。
各ブラウジングコンテキストbcは、コンテナー文書を持ち、これは次の手順を実行した結果である:
childのコンテナー文書がnullでなく、かつchildのコンテナー文書のブラウジングコンテキストがparentである場合、ブラウジングコンテキストchildは、別のブラウジングコンテキストparentの子ブラウジングコンテキストと呼ばれる。
ブラウジングコンテキストchildは、childが子ブラウジングコンテキストであり、かつchildのコンテナーが文書ツリー内である場合、parentの文書ツリーの子ブラウジングコンテキストである。
ブラウジングコンテキストchildは親ブラウジングコンテキストを持ってもよい。もしそのようなブラウジングコンテキストが存在すれば、これは子ブラウジングコンテキストとしてchildを持つ一意なブラウジングコンテキストである。そうでなければ、ブラウジングコンテキストは、親ブラウジングコンテキストを持たない。
ブラウジングコンテキストAがAの子ブラウジングコンテキストであり、かつBの祖先自身であるブラウジングコンテキストA'が存在する場合、またはブラウジングコンテキストAがBの親ブラウジングコンテキストである場合、ブラウジングコンテキストBの祖先であるといわれる。
親ブラウジングコンテキストを持たないブラウジングコンテキストは、それ自身のトップレベルブラウジングコンテキストであり、祖先ブラウジングコンテキストであるブラウジングコンテキストのすべてとなる。
トップレベルブラウジングコンテキストは、関連するグループ(nullまたはブラウジングコンテキストグループ)を持つ。最初はnullである。
トップレベルブラウジングコンテキストは、ポップアップ真偽値を持つ。最初はfalseである。
この仕様での唯一の必須の影響はポップアップであり、関連するBarProp
オブジェクトのvisible
ゲッターにある。しかし、ユーザーエージェントは次の方法でも使用できる:
どちらの場合も、ユーザーエージェントはユーザー設定を追加で組み込むか、ポップアップルートをたどるかどうかの選択肢を提示する場合がある。
そのようなポップアップに最小限のウェブブラウザーユーザーインターフェイスを提供するユーザーエージェントは、ブラウザーのロケーションバーを非表示にしないことを勧める。
コンテナーがnullの間に、トップレベルブラウジングコンテキストに関連する新しいブラウジングコンテキストを作成することができる。そのようなブラウジングコンテキストは、補助ブラウジングコンテキストと呼ばれる。補助ブラウジングコンテキストは常にトップレベルブラウジングコンテキストである。
子ブラウジングコンテキストであるブラウジングコンテキストに対する親ブラウジングコンテキストの推移的クロージャは、祖先ブラウジングコンテキストのリストを与える。
Document
dの子孫ブラウジングコンテキストのリストは、以下のアルゴリズムによって返される(順序付きの)リストである:
listを空のリストにする。
ネストされたブラウジングコンテキストがnullでなく、シャドウを含むルートがdである各ブラウジングコンテキストコンテナーcontainerごとに、シャドウを含むツリーの順序で:
nestedBCをコンテナーのネストされたブラウジングコンテキストにする。
nestedBCをlistに追加する。
nestedBCのアクティブ文書の子孫ブラウジングコンテキストのリストでlistを拡張する。
listを返す。
Document
dは、dのブラウジングコンテキストがnullでなく、dのブラウジングコンテキストのアクティブ文書がdであり、dのブラウジングコンテキストがトップレベルブラウジングコンテキストであるか、dのブラウジングコンテキストのコンテナー文書が完全にアクティブであるかのいずれかの場合に、完全にアクティブであるという。
子ブラウジングコンテキストは要素に関連付けられているため、常にその親ブラウジングコンテキスト内の特定のDocument
に関連付けられている。 ユーザーエージェントは、ユーザーにがいない自身が完全にアクティブでないDocument
にある要素の子ブラウジングコンテキストと対話することを許可してはならない。
次の例は、アクティブなDocument
オブジェクトと完全にアクティブなDocument
オブジェクトの違いを示している。 ここで、a.html
はブラウザーのウィンドウに読み込まれ、b-1.html
は示されているように最初にiframe
に読み込まれ、b-2.html
およびc.html
は省略される(単に空の文書にすることができる)。
<!-- a.html -->
<!DOCTYPE html>
< html lang = "en" >
< title > Browsing context 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 > Browsing context B</ title >
< iframe src = "c.html" ></ iframe >
この時点で、a.html
、b-1.html
、およびc.html
によって提供される文書はすべて、それぞれのブラウジングコンテキストのアクティブな文書である。それらはまた、すべて完全にアクティブである。
button
をクリックし、b-2.html
からブラウジングコンテキストBに新しいDocument
をロードする後に、次の結果が得られる:
b-1.html
Document
は、ブラウジングコンテキストBのアクティブな文書ではなくなった。そのため、完全にアクティブにもならない。
新しいb-2.html
Document
は、ブラウジングコンテキストBのアクティブな文書になり、完全にアクティブにもなる。
c.html
Document
は引き続きブラウジングコンテキストCのアクティブな文書である。しかし、Cのコンテナー文書はb-1.html
Document
であり、それ自身は完全にアクティブではないため、 c.html
Document
は完全にアクティブにはならない(アクティブであるにもかかわらず)。
ここに含まれる複雑さ、特にセッション履歴に影響を与える詳細については、A Model of Navigation Historyを参照のこと。[NAVMODEL]
子ブラウジングコンテキストは、遅延load
イベントモードにすることができる。新しいDocument
が作成される前に、コンテナーのロードイベントを遅延させるために、ナビゲート時に使用される。
ブラウジングコンテキストの文書ファミリーは、そのブラウジングコンテキストのセッション履歴ですべてのDocument
オブジェクト、およびすべてのそれらDocument
オブジェクトの文書ファミリーの和集合で構成される。Document
オブジェクトの文書ファミリーは、Document
オブジェクトの子孫のブラウジングコンテキストのリストにあるブラウジングコンテキストのすべての文書ファミリーの和集合で構成されている。
ブラウジングコンテキストコンテナー containerのコンテンツ文書は、次のアルゴリズムの結果である:
containerのネストされたブラウジングコンテキストがnullである場合、nullを返す。
contextをcontainerのネストされたブラウジングコンテキストにする。
documentをcontextのアクティブ文書にする。
documentを返す。
window.top
トップレベルブラウジングコンテキストのWindowProxy
を返す。
window.opener [ = value ]
オープナーブラウジングコンテキストに対するWindowProxy
を返す。
存在しないまたはnullが設定されている場合、nullを返す。
nullに設定可能である。
window.parent
親ブラウジングコンテキストに対するWindowProxy
を返す。
window.frameElement
存在しない場合、生成元をまたいだ状況でnullを返す。
ブラウジングコンテキストは、ブラウジングコンテキスト名を持つことができる。特に明記しない限り、それは空文字列である。
妥当なブラウジングコンテキスト名は、U+005F LOW LINE文字で始まらない少なくとも1文字をもつ任意の文字列である。(アンダースコアで始まる名前は、特別なキーワードのために予約されている。)
妥当なブラウジングコンテキスト名またはキーワードは、妥当なブラウジングコンテキスト名またはASCII大文字・小文字不区別で_blank
、_self
、_parent
、または_top
の1つに一致するいずれかとなる任意の文字列である。
これらの値は、以下の(非規範的な)テーブルで要約されるように、ページがサンドボックス化されるかどうかに基づいて異なる意味を持つ。この表において、"current"はリンクまたはスクリプト内にあるブラウジングコンテキストを意味し、"parent"はリンクまたはスクリプト内にあるいずれかの親ブラウジングコンテキストを意味し、"top"はリンクまたはスクリプトがあるいずれかのトップレベルブラウジングコンテキストを意味し、"new"はさまざまなユーザー設定とユーザーエージェントのポリシーに次第で、新しいトップレベルブラウジングコンテキストまたは補助ブラウジングコンテキストが作成されることを意味し、"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 |
サンドボックス化されたブラウジングコンテキストの制限のほとんどは、他のアルゴリズムにより適用される。たとえば、下記で与えられるブラウジングコンテキスト名を選択するための規則でなく、ナビゲーションアルゴリズムとして。