閲覧文脈の作成

閲覧文脈の作成 (Web)

[8] 閲覧文脈の作成は、を開くなどの利用者の操作により、 あるいは iframe 要素の挿入などのスクリプトの操作により、 行われます。

[41] 閲覧文脈を作成すると、閲覧文脈に対応する JavaScript オブジェクトであり大域オブジェクトでもある Window と、 JavaScript から実際にアクセスできるオブジェクトである WindowProxy が作成されます。更に、 閲覧文脈の初期状態である about:blank文書が作成されます。 そしてこれらの関連付けと初期化が行われます。

仕様書

文脈

[9] 次の場面で閲覧文脈の作成が呼び出されます。

処理

[2] 新しい閲覧文脈の作成 (create a new browsing context) >>1 は、 次のようにします。

引数として作成子閲覧文脈 (閲覧文脈または無指定)、 入れ子か最上位か補助閲覧文脈か否かnoopener (既定値) を指定できます。

  1. [24] 作成子起源を、作成子文書起源に設定します。
  2. [50] 閲覧文脈を、新しい閲覧文脈に設定します。
    [49] 閲覧文脈
    入れ子か最上位か
    入れ子か最上位か
    補助閲覧文脈
    補助閲覧文脈か否か
    作成子閲覧文脈
    作成子閲覧文脈
    作成子基底URL
    作成子閲覧文脈null なら null、 それ以外なら作成子閲覧文脈活性文書基底URL
    iframe sandboxing flag set
    sandbox 属性parse the sandboxing directive して得た砂箱化フラグ集合 (iframe 入れ子閲覧文脈の場合) >>19
  3. [48] を、新しい Window に設定します >>1
  4. [47] InitializeHostDefinedRealm を実行します。 >>1
    大域オブジェクト
    大域this
    閲覧文脈WindowProxy
  5. [83] realm実行文脈を、走っているJavaScript実行文脈に設定します。
  6. [52] 設定群オブジェクトを、 realm実行文脈について閲覧文脈環境設定群オブジェクトの設定を行った結果に設定します >>1
  7. [15] 文書を、新しい初期「about:blank文書 (initial "about:blank" document) に設定します >>1
    [53] 文書
    HTML文書
    ready for post-load tasks
    completely loaded
    子供節点
    html 要素。その子供head 要素body 要素 (いずれも)。
    時刻起源
    現在時刻 >>64
  8. [16] 閲覧文脈について文書活性文書を設定します >>1
  9. [37] 閲覧文脈作成子閲覧文脈が null なら >>1
    1. [39] 文書起源を、新しい不透明起源に設定します。
  10. [38] それ以外なら >>1
    1. [71] 作成子文書を、作成子閲覧文脈活性文書に設定します。
    2. [42] 文書参照元を、作成子文書番地に設定します。
    3. [35] 文書参照元ポリシーを、作成子文書参照元ポリシーに設定します。
    4. [43] 文書起源を、作成子起源に設定します。
  11. [18] 文書について砂箱化の実装を行います >>1
  12. [75] 文書についてset the allow* flagsします。 >>1
  13. [17] 閲覧文脈セッション履歴に、 新しいセッション履歴エントリーを追加します >>1
    [45] セッション履歴エントリー
    文書
    文書
  14. [22] 入れ子か最上位か最上位閲覧文脈の場合、
    1. [77] noopenerで、 作成子起源文書起源同じ起源の場合、
      1. [23] 作成子閲覧文脈作成子起源に関する sessionStorage 蓄積領域を閲覧文脈へと複製します。 >>1
  15. [30] 入れ子か最上位か入れ子閲覧文脈の場合、 >>29
    1. [31] 閲覧文脈embedding document非保安要求ポリシーが「格上げする」なら、
      1. [32] 閲覧文脈非保安要求ポリシーを、「格上げする」に設定します。
      2. [33] 閲覧文脈embedding document非保安navigate格上げ集合の各値について、 閲覧文脈非保安navigate格上げ集合に追加します。
  16. [63] webNavigation API の onCreatedNavigationTarget を現在時刻と共に実行します。 仕様書なし
  17. [51] 閲覧文脈を返します >>1
[26] 閲覧文脈の複製というのが具体的にどのような操作なのかは不明です。 そのような API は無さそうですが、そのような利用者の操作を実装している Webブラウザーがあります (例えば Chromeタブの複製操作があります)。
[27] 新しい閲覧文脈に関係する文書については、閲覧文脈の選択を参照。 (閲覧文脈の選択によらない場合でも、理論上は Webブラウザー依存の方法 (UI) から新しい閲覧文脈を作成した場合で該当することはあるかもしれません。)
[20] 閲覧文脈の作成後、 (本作成手順の呼び出し元で) 閲覧文脈名が設定されることになります。

[10] Window大域オブジェクトですから、 付随して環境設定群オブジェクトJavaScript 実行環境、 Web IDL インターフェイスオブジェクトなども作られます。 この Window は、 navigate により次の文書に再利用されることがあります。

[11] 本項の初期化手順の後に、閲覧文脈が使われる各文脈に依存した次の処理が (必要なら) 行われます。

[12] Webブラウザーで新たなタブを開いたことによる閲覧文脈の作成の場合には、 <about:newtab> などの Webブラウザー依存の初期ページや、 利用者の設定したホームページへと置換有効navigate されます。

[13] 外部アプリケーションから WebブラウザーURL を指定して起動 (あるいはプロセス間通信により URL を開くことを指示) した場合には、その URL へと置換有効navigate されます。

[14] お気に入りや閲覧履歴などの Webブラウザー依存の利用者インターフェイスを通して URL を指定して新しい閲覧履歴が開かれた場合には、 その URL へと置換有効navigate されます。

[28] 作成した閲覧文脈がいつ利用者に表示されるかは、作成される場面や利用者エージェントの設計方針により異なります。 入れ子閲覧文脈の場合は、次のレンダリングの更新の時点と思われます。 最上位閲覧文脈の場合は、ただちに表示されるのが普通と思われますが、 敢えてそうしないこともあるかもしれません (navigate 参照)。

閲覧文脈の作成の呼び出し元で、閲覧文脈の表示サイズなどの設定が行われることがあります。 window.open閲覧文脈の選択を参照。

[54] いずれにせよ、 閲覧文脈の作成と前後して、その閲覧文脈の表示のためのタブ、 関係する利用者インターフェイスなどの作成と初期化を適宜行う必要があります。

[55] その具体的な方法やタイミングは環境や実装方法に依存しますし、 Web互換性に直接影響しないので、標準化されていません。

[36] 閲覧文脈は、 作成子閲覧文脈 (creator browsing context) 作成子文脈セキュリティー (creator context security) 作成子URL (creator URL) 作成子基底URL (creator base URL) 作成子参照元ポリシー (creator referrer policy) 作成子起源 (creator origin) >>1 を持ちます。 これらは閲覧文脈の作成時に (あれば) 設定されます。 作成子閲覧文脈作成子文脈セキュリティーは、いくつかの処理で参照されます。 作成子基底URLは、フォールバック基底URLの決定で参照されます。 作成子URL作成子起源作成子参照元ポリシーは、 仕様書上の閲覧文脈の作成でのみ参照されるので、 実際には閲覧文脈の状態として保持し続ける必要はありません。

[44] かつては作成子閲覧文脈作成子Document (creator Document) でした。

最初の about:blank 文書

[4] 閲覧文脈の作成時に作成される文書は、仕様書中では 「閲覧文脈作成時に追加された about:blank 文書」、 「初期『about:blank』文書」などと呼ばれます。

[21] 閲覧文脈作成時にセッション履歴に追加された about:blank 文書は、次の場面で特別に扱われます。

[5] 初期文書かどうかは、置換有効navigate するかどうかの判断に使われます。 つまり初期文書は当該閲覧文脈navigate が最初に発生した時にセッション履歴から削除されることになります。

[6] この判断は初期文書かどうか否かで行うので、スクリプトにより内容を操作しているか否かは影響しません。 (ただし document.openpushStateセッション履歴エントリーが新たに追加されていれば、 初期文書が唯一のセッション履歴エントリーであるとの条件を満たさなくなります。)

[7] replaceStatedocument.openセッション履歴エントリーが置換された場合で URLabout:blank でなくなった場合、 あるいは about:blank のままでセッション履歴エントリーが置き換わった場合にどう影響するのかは明確ではありません。 初期「about:blank」文書であるかどうかの判断が文書に於けるものかセッション履歴エントリーに於けるものかで変わってきます。

歴史

[34] Refactor browsing context creation · whatwg/html@357f649 ( 版) <https://github.com/whatwg/html/commit/357f649a2fda01b0ae07c3d7643d3123d29a5538>

[46] Rewrite global object initialization to delegate to ES · whatwg/html@cf0355d ( 版) <https://github.com/whatwg/html/commit/cf0355d7e0e229b98f7fbd51b8c7608010c787f5>

[56] Rewrite script execution on top of ES · whatwg/html@4891d18 ( 版) <https://github.com/whatwg/html/commit/4891d18aaf2df1d40aa61f467a5a10cfc19dd85d>

[57] Define security around Window, WindowProxy, and Location properly · whatwg/html@acae3df ( 版) <https://github.com/whatwg/html/commit/acae3df652b382e9f4f1d1b4dc7e08e2b00df821>

[58] Remove the origin aliasing concept · whatwg/html@438155d ( 版) <https://github.com/whatwg/html/commit/438155d2a2255aa5ea84ae390744d8a8662ebec2>

[59] Sync with recent changes to the JS spec's job queue · whatwg/html@5af258f ( 版) <https://github.com/whatwg/html/commit/5af258f33e3e2f55eb30e611cb7aee625a8bd16a>

[60] Define the origin of non-initial about:blank documents · whatwg/html@baad9fd ( 版) <https://github.com/whatwg/html/commit/baad9fd10e5a49c1c72fc89426ffa2a26e0b72e4>

[61] Merge effective script origin into origin · whatwg/html@8a843f2 ( 版) <https://github.com/whatwg/html/commit/8a843f2169a6864a3024c4329528dccb2051d275>

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

[3] Integrate with the Referrer Policy spec, part 2 of n ( (domenic著, )) <https://github.com/whatwg/html/commit/176e74243c649b709b9959b7d08b327290c2f403>

[62] Cleanup "create a new browsing context" ( (annevk著, )) <https://github.com/whatwg/html/commit/f139279fb116bbde5d5ee3d257d21778cd774144>

[65] Define initial about:blank document better ( (annevk著, )) <https://github.com/whatwg/html/commit/8edc92d6e42878662c7f9f75a43352bd341ae01d>

[66] Use fullscreen logic for initial about:blank documents too ( (annevk著, )) <https://github.com/whatwg/html/commit/c2a8d605e0115c80d1ccb4b15371ecaa56a33e30>

[67] Make allowfullscreen and allowusermedia match implementations (annevk著, ) <https://github.com/whatwg/html/commit/9f6b91cb14a0f497ee5b3e7118ee65e687eaea78>

[68] Add 'creator context security' (mikewest著, ) <https://github.com/whatwg/html/commit/91f1919249bc75e4a6491ee7ec650c9843f9da50>

[69] Fixing some links and cleaning up lists. (mikewest著, ) <https://github.com/w3c/webappsec-secure-contexts/commit/5f36532e8909c8bf72daa431724b6372bc5366ab>

[72] Add environment's execution ready flag (jungkees著, ) <https://github.com/whatwg/html/commit/d358c7814de8a053dcb8615a5d87e8c2e0e19257>

[74] Snapshot allowpaymentrequest and allowusermedia attributes (zcorpan著, ) <https://github.com/whatwg/html/commit/b3224a8457e32015153ed91f26b6212e25df1d6b>

[76] Centralize setting the active document (annevk著, ) <https://github.com/whatwg/html/commit/4257a9bf03f8ebbd6cc8b41933b6c5b619611662>

[73] Make noopener stop the copying of session storage (mystor著, ) <https://github.com/whatwg/html/commit/a68a1f712b641981d7367d78758596b21a04521c>

[78] Mention `sessionStorage` copying in logic for creating auxiliary browsing contexts · Issue #2681 · whatwg/html () <https://github.com/whatwg/html/issues/2681>

[79] Mention sessionStorage copying in logic for creating a new browsing context by mystor · Pull Request #2832 · whatwg/html () <https://github.com/whatwg/html/pull/2832>

[80] Drop creator context security (annevk著, ) <https://github.com/whatwg/html/commit/5952d8361b5930a3dfe7a6d814a194be6e013d8b>

[70] Creator context security used incorrectly · Issue #48 · w3c/webappsec-secure-contexts () <https://github.com/w3c/webappsec-secure-contexts/issues/48>

[81] Drop creator context security by annevk · Pull Request #3150 · whatwg/html () <https://github.com/whatwg/html/pull/3150>

[82] Editorial: Define "realm execution context" in a separate step (TimothyGu著, ) <https://github.com/whatwg/html/commit/b5f9ad629cb498206bd9e4144de9ec58e27fef98>

[84] Editorial: Define "realm execution context" in a separate step by TimothyGu · Pull Request #3314 · whatwg/html () <https://github.com/whatwg/html/pull/3314>