determining the origin

閲覧文脈 (Web)

[30] 閲覧文脈 (えつらんぶんみゃく) (browsing context) は、 Webブラウザーにおけるタブフレームに相当する内部オブジェクトです。

[31] JavaScript からは Window オブジェクトのように見えますが、 厳密には異なります。

仕様書

意味

[1] 閲覧文脈 (えつらんぶんみゃく) (browsing context) は、そこに於いて Document オブジェクト利用者提示される (presented) 環境 (environment) です WA1 >>3

[7] 閲覧文脈とは要はWebブラウザータブであったり iframe 要素であったりと、(文書の側からすると) window オブジェクトによって表されるものなのですが、 実際にはこの周辺の仕組みは極めて複雑なためにまどろっこしい定義になっています。

[4] Webブラウザータブは通常閲覧文脈を1つ含んでいます。

[5] iframe 要素frame 要素閲覧文脈を作ります。

[6] object 要素はその表す (represent) 内容によっては閲覧文脈を作ります。

状態

[20] 閲覧文脈は、次の状態を持ちます。

子供閲覧文脈である / 最上位閲覧文脈である
子供閲覧文脈最上位閲覧文脈か。 作成時にどちらかちょうど1つだけがとなり、変化することはありません。
補助閲覧文脈
補助閲覧文脈かどうか。作成時に決まり、変化することはありません。
二次的閲覧文脈
二次的閲覧文脈かどうか。作成時に決まり、変化することはありません。
WindowProxy
>>10
Window
大域オブジェクトです。
セッション履歴
閲覧文脈で表示した文書と付随する状態のリスト。
作成子閲覧文脈
作成の責を負った閲覧文脈 >>3
作成子URL
作成元の文書の番地
作成子起源
作成元の文書の起源
作成子基底URL
作成元の文書基底URL
作成子文脈セキュリティー
包含子
親閲覧文脈
最上位閲覧文脈
親閲覧文脈をそれ以上辿れない閲覧文脈です。
opener閲覧文脈の逆関係の閲覧文脈
直接到達可能閲覧文脈かどうかの判定のためにopener閲覧文脈の逆方向の閲覧文脈かどうか決定できる必要があります。
script-closable
window.close が機能する条件です。
is closing
閲覧文脈名
活性文書
現在エントリー文書です。
関連する類似起源閲覧文脈の単位
所属する関連する類似起源閲覧文脈の単位です。 活性文書が変化すると、変化するかもしれません。
イベントループ
関連する類似起源閲覧文脈の単位イベントループです。
画布
閲覧領域
非保安要求ポリシー
http:https:URL 書き換えを行うか否か。
非保安navigate格上げ集合
navigate 時に http:https:URL 書き換えを行うか否か。
one permitted sandboxed navigator
レンダリング機会
厳密混合内容検査フラグ

[29] 最上位閲覧文脈は、加えて次の状態を持ちます。

最上位閲覧文脈が表示されているです。
popup sandboxing flag set
セッション履歴探索キュー
セッション履歴上の移動の処理を扱うタスクキューです。
セッション履歴イベントループ
セッション履歴探索キューを処理するものとして並列に実行されるものです。
結合セッション履歴
セッション履歴入れ子閲覧文脈セッション履歴を結合したものです。
セッションストレージ領域
セッションストレージ領域は、 sessionStorage で使われます。 起源ごとに存在します。

[25] 子供閲覧文脈は、加えて次の状態を持ちます。

閲覧文脈包含子
入れ子閲覧文脈を作成した要素に関連付けられます。
delaying load events mode
delay the load event の適用対象になっているかどうかのフラグ。
iframe sandboxing flag set
iframe 要素属性から得られた sandboxing flag set

[27] 補助閲覧文脈は、加えて次の状態を持ちます。

opener閲覧文脈
閲覧文脈を開いた元の閲覧文脈
スクリプトにより作成されかどうか
script-closable かどうかの決定で参照されます。

閲覧文脈同士の関係

[16] 閲覧文脈群には次のようなグループ化の単位があります。

[26] 閲覧文脈を介した文書との関係

[28] 閲覧文脈は使われ方により次のように分類されます (次のリストの各項目は、 互いに排他的とは限りません)。

文書との関係

[21] Document閲覧文脈 (Document's browsing context) は、 セッション履歴に当該 Document を含むような閲覧文脈であって、 その捨てられたであるもの (あれば) です >>22document.defaultView に相当します。

[37] 文書閲覧文脈があることを、「閲覧文脈中にある (in) 」 などといいます。 navigate で作られた文書など閲覧文脈中にある文書もあれば、 XHR で作られた文書など閲覧文脈を持たない文書もあります。

[38] 閲覧文脈に現在表示中の文書のことを活性文書といいます。 window.document に相当します。

[23] セッション履歴セッション履歴エントリーも参照。

窓との関係

[10] 閲覧文脈には、それに対応する WindowProxy オブジェクトが1つあります。 >>3 閲覧文脈は、 WindowProxy への強い参照を持ちます >>40

[11] それに対して閲覧文脈で提示される Document オブジェクトには、それぞれ対応する Window オブジェクトが1つずつあります。>>3

[63] WindowProxy はその名の通り「 (proxy) 」であり、 すべてをその閲覧文脈活性文書Window オブジェクトに転送します。 >>3

[35] 仕様上 WindowProxy閲覧文脈は別のオブジェクトとして規定されていますが、 閲覧文脈は仕様書上にのみ登場する内部オブジェクトで、JavaScript からはアクセスできませんから、どう実装されるかは Webブラウザーによります。両者は常に一対一対応していますから、 実質的に同じオブジェクトとみなすこともできます。


[46] 起源 (きげん) 決定 (けってい) (determine the origin) するには、 閲覧文脈URL砂箱化フラグ集合呼び出し起源活性文書navigate起源を、 次のようにします。 >>45

  1. [47] 砂箱化フラグ集合砂箱化起源閲覧文脈フラグの場合、
    1. [48] 新しい不透明起源を返します。
  2. [49] それ以外で、 URLnull の場合、
    1. [50] 新しい不透明起源を返します。
  3. [51] それ以外で、 活性文書navigate起源nullなくURLschemejavascript の場合、
    1. [52] 活性文書navigate起源を返します。
  4. [53] それ以外で、 呼び出し起源nullなくURLabout:blank の場合、
    1. [54] 呼び出し起源を返します。
  5. [55] それ以外で、 URLabout:srcdoc の場合、
    1. [56] 閲覧文脈包含子文書起源を返します。
  6. [57] それ以外の場合、
    1. [58] URL起源を返します。
[66] 新しい起源を返す場合と、既に存在する起源を返す場合があることに注意。 同じ起源を共通する場合、 document.domain の設定の影響がその両方に適用されることになります。

[61] 新しい閲覧文脈を作成する手順群と navigate文書オブジェクトの作成と初期化から呼び出されます。

[60] この手順群の改訂で独立した手順群となりました。 それ以前はいろいろなところで分散して規定されていました。

[62] navigate 時についてまとめると次の通りでした。

[268] 文書の起源実効スクリプト起源は、次のように決定しなければなりません

  1. [390] 応答ネットワークエラーの場合など、 navigate応答の処理非文書表示とされた場合、
    1. [448] 新しい文書起源を、新しい不透明起源に設定します >>12
  2. [256] それ以外で、新しい文書活性砂箱化フラグ集合砂箱化起源閲覧文脈フラグが設定されていれば、 >>244
    1. [257] 新しい文書文書の起源を、新しい不透明起源に設定します。
  3. [119] それ以外で、新しい文書文書の番地schemenetwork scheme なら、>>244
    1. [247] 新しい文書文書の起源を、新しい文書番地起源の複製に設定します。
  4. [255] それ以外で、 新しい文書文書の番地about:blank なら、>>244
    1. [259] 新しい文書起源を、文書の起源に設定します。
  5. [260] それ以外で、新しい資源URL (リダイレクト前の最初のもの) があってその schemejavascript なら、 >>244
    1. [261] 新しい文書起源を、文書の起源に設定します。
  6. [262] それ以外で、 iframe srcdoc文書なら、 >>244
    1. [263] 新しい文書文書の起源を、 navigate する閲覧文脈閲覧文脈包含子節点文書起源に設定します。
  7. [264] それ以外なら、 >>244, >>266
    1. [265] 新しい文書文書の起源を、新しい不透明起源に設定します。
[334] HTML Standardabout:blank への navigate をすべて >>255 としていますが、著者以外が URL を与えた場合 (アドレスバーお気に入りからの選択の場合など) は >>264 が適用されると思われます。
[333] 初期about:blank文書navigate で作成される文書ではなく、 閲覧文脈の作成で作成される文書です。起源初期about:blank文書を参照。
[327] view-source:>>264 より不透明起源となります。
[328] chrome:chrome-extension: やその他の about: のようなWebブラウザー固有の URLブラウザー拡張URL への navigate では、Webブラウザー依存の方法で決めた起源に設定すると思われます。 Webブラウザー依存の起源については現在の仕様上は扱いが明確になっていません。

作成

[8] 閲覧文脈の作成を参照。

破棄

[39] 閲覧文脈を破棄する処理はいくつかあります。

レンダリング

[9] レンダリングの更新を参照。

歴史

[33] Netscape 2 により JavaScriptフレームが導入されました。 現在の閲覧文脈に相当するものはこの時に登場したことになります。

[34] 閲覧文脈という用語が登場しその性質と挙動が初めて明確に規定されたのは、 その10年後の Web Applications 1.0 (現 HTML Standard) でした。

[13] [whatwg] Should events be paused on detached iframes? ( ( 版)) http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-December/029346.html

[14] Window Object 1.0 ( ( 版)) http://www.w3.org/TR/Window/#dfn-browsing-context

[17] Web Applications 1.0 r8776 Try to fix the logic around opening new tabs because the user said so, even in sandboxed environments ( ( 版)) https://html5.org/r/8776

[18] MIX: Drop "JavaScript Global Environment". · 5d32821 · w3c/webappsec ( ( 版)) https://github.com/w3c/webappsec/commit/5d32821b21f3cb06a651c966f729b3044292a08a

[19] Web Applications 1.0 r8882 Add hyperlinks for creating browsing contexts. ( ( 版)) https://html5.org/r/8882

[24] Clarify the definition of window.frameElement · whatwg/html@a398377 ( 版) https://github.com/whatwg/html/commit/a398377bbc8483e27c4fc478a097ef72f3057593

[36] Use new "document's browsing context" concept everywhere · whatwg/html@6fe2ac7 ( 版) https://github.com/whatwg/html/commit/6fe2ac75f7ab63b98fe1637129f0a8574a542e55

[41] Remove the concept of creator Document so we don't leak a document · whatwg/html@a996f3b ( 版) https://github.com/whatwg/html/commit/a996f3b4982f20697f71a23c919567a638519959

[42] Be more precise about nested and discarded browsing contexts (domenic著, ) https://github.com/whatwg/html/commit/39118df640ad4a3f03f164fb5ffe0a56316297be

[43] Set the top-level browser context to use for a session. (#929) (shs96c著, ) https://github.com/w3c/webdriver/commit/70a3387eaa8021027c5ae543ae9d2c3df167a913

[44] 540988 - ☂ Speed up discarded tab restoration - chromium - Monorail () https://bugs.chromium.org/p/chromium/issues/detail?id=540988

[59] Refactor the navigation algorithm (dtapuska, , ) https://github.com/whatwg/html/commit/061e782437c6cff600f18bc96c1a11489e09c3ab

[64] Refactor navigation algorithm. by dtapuska · Pull Request #4664 · whatwg/html () https://github.com/whatwg/html/pull/4664

[65] Clarify creator origin reuse (annevk, , ) https://github.com/whatwg/html/commit/c6463cb8954f3befdc16317d40d431857d3a27cd

[67] Alias or clone creator origin of a newly created browsing context · Issue #4126 · whatwg/html () https://github.com/whatwg/html/issues/4126

[68] Clarify creator origin reuse by annevk · Pull Request #5108 · whatwg/html () https://github.com/whatwg/html/pull/5108

[69] Editorial: nested browsing context is a member, not a type (annevk, , ) https://github.com/whatwg/html/commit/6b737bbc428facf34ec3728c0912cf9e172d0ea4