script-closable

閲覧文脈を捨てる (Web)

仕様書

Window インターフェイス close メソッド

[37] Window インターフェイスclose メソッドは、 次のようにしなければなりません >>36

  1. [57] 現在を、文脈オブジェクト閲覧文脈に設定します。
  2. [73] 現在null か、 現在閉じ中の場合、
    1. [74] ここで停止します。
  3. [39] 現在script-closable で、 現職設定群オブジェクト有責閲覧文脈現在精通しており、 現職設定群オブジェクト有責閲覧文脈現在allowed to navigate である場合、
    1. [38] 現在閉じ中を、 に設定します。
    2. [40] タスクをキューに追加します。
      タスク
      1. [41] 現在閉じます
      タスク源
      DOM操作タスク源

[42] 閲覧文脈閲覧文脈script-closable であるとは、 次の条件のいずれかを満たすことをいいます >>36

  1. [43] 閲覧文脈補助閲覧文脈であり、利用者ではなくスクリプトが作成した
  2. [44] 閲覧文脈最上位閲覧文脈であり、閲覧文脈セッション履歴に含まれる文書が1つだけである
[65] 1つ目の条件は、閲覧文脈の選択 (やその他の方法での閲覧文脈の作成) で新しい閲覧文脈が作成された時に閲覧文脈のフラグとして保存することになります。
[45] 複数のセッション履歴エントリーが同じ文書と関連付けられることがありますから (素片識別子へのnavigatepushState)、 2つ目の条件とセッション履歴エントリーの個数は関係ありません。
[64] 入れ子閲覧文脈はどちらの条件も満たすことがなく、 window.close により閉じられることはありません。
[61] これは window.close からのみ参照されています。

[60] 閉じるというある種特殊な動作で Webブラウザーの実装上の都合や利用者の体験への配慮を重視してか、 window.close の挙動は MUST ではなく SHOULD となっています。

[62] アプリ内ブラウザー最上位閲覧文脈を閉じるかどうかの判断には、 通常とは異なるアプリ依存の要素が考慮されるかもしれません。


[54] Chrome では、「スクリプトが作成した」かどうかの検査は行われないようです。 <a href target=newwindow>クリックは、 スクリプトによるものであれ、利用者によるものであれ、 window.close 可能なになります。 (文脈メニューから新しいを開いた場合には、 window.close で閉じられません。)

[63] IE利用者を閉じるか確認するモーダルダイアログを表示することがあります。

Window インターフェイス closed 属性

[46] Window インターフェイスclosed IDL属性は、 閲覧文脈が捨てられたかどうかを表します。

[47] 取得器は、次のようにしなければなりません >>36

  1. [66] 文脈オブジェクト閲覧文脈null の場合、
    1. [70] を返します。
  2. [71] それ以外の場合、
    1. [72] 文脈オブジェクト閲覧文脈閉じ中を返します。

[67] 閲覧文脈は、 閉じ中 (is closing) を持ちます。初期値はです。 HTML Standard

[11] 他に、文書の閲覧文脈から参照されます。

閉じる

[23] 閲覧文脈を閉じる (close a browsing context) 時は、 閲覧文脈を次のようにしなければなりません

  1. [50] 閲覧文脈スクリプトを無効にしても構いません >>49
  2. [24] 結果を、 閲覧文脈活性文書prompt to unload a document した結果に設定します >>22
  3. [25] 結果refused to allow the document to be unloaded なら、
    1. [68] ここで停止します >>22
  4. [26] 閲覧文脈活性文書unload a document します。 >>22
  5. [27] 利用者インターフェイスから閲覧文脈を削除します >>22
    • 例えばタブを閉じるなどします >>22
  6. [28] 閲覧文脈捨てます >>22

[55] いずれかのタイミングで文書活性文書でなくなるか、 プラットフォームの焦点を持つ状態ではなくなり、 固定状態であっても解除されると思われます。


[29] 利用者エージェントは、利用者最上位閲覧文脈閉じる機能を提供するべきです >>22

[30] 通常の Webブラウザーには、「Webブラウザーの終了」や 「タブを閉じる」の機能があります。 Webブラウザー自体がメニューボタンとして実装している場合もあれば、 プラットフォームを通じた終了の指示 (例えばタスクバーメニューからの選択) を Webブラウザーが受け取る形で実装されている場合もあります。

[14] 埋め込みブラウザーの場合、 通常の Webブラウザーとは異なり利用者の指示で閉じる機能は用意されていなかったり、 Webブラウザーを使った機能から Webブラウザーを使わない機能への遷移という形で実装されていたりするかもしれません。
[31] 他に、閲覧文脈を捨てる機能 (>>3) も提供されるかもしれません。

[34] その他に、 window.close から呼ばれます。

入れ子閲覧文脈について呼ばれることはありません。

[35] ブラウザー拡張WebDriver、その他の Webブラウザー依存の API によって呼び出される場合もあります。

捨てる

[2] 閲覧文脈が捨てられる (discard a browsing context) 時は、 閲覧文脈を次のようにしなければなりません

  1. [7] 利用者エージェントから閲覧文脈への強い参照があれば、破棄します >>1
  2. [8] 閲覧文脈セッション履歴の全セッション履歴エントリーエントリーについて、
    1. [9] エントリー文書について、文書を捨てる処理を実行します >>1
  3. [10] 閲覧文脈捨てられたを、に設定します。

[12] なお、閲覧文脈捨てられた後も、 閲覧文脈閲覧文脈WindowProxy への参照はどこかに残っているかもしれません。


[6] 閲覧文脈を捨てる処理は、次の場面で呼び出されます。

[5] 入れ子閲覧文脈は、 WindowProxyごみ収集の対象となった時、捨てなければなりません >>1

[33] 閲覧文脈が捨てられるのは、いずれも閲覧文脈レンダリングされなくなった後です。 (>>3利用者エージェントが“いつでも”捨てられるのは例外ですが、 普通はレンダリングされた状態のまま捨てることは無いはずです。)

[3] 利用者エージェントは、いつでも (特に利用者の指示があった場合には) 最上位閲覧文脈を捨てて構いません >>1

[4] 例えば利用者が1つ以上最上位閲覧文脈を持つを強制的に閉じた場合が該当します >>1

[32] 閲覧文脈を閉じる機能 (>>29) も提供されるかもしれません。 通常終了はそちらの方が適切と考えられます。

中断

[75] プラットフォーム (OS) やWebブラウザーの仕様により、 他のアプリへの切り替えやスリープ状態などで中断されることがあります。 スクリプトの中断

歴史

[48] window.close はかつてはどんなでも閉じられた気がしますが、 乱用を防ぐためにスクリプトが開いた最上位閲覧文脈しか閉じられないようになりました。

[19] Web Applications 1.0 r7127 Make it ok to window.close() a browsing context that has never been (re)navigated. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7126&to=7127

[20] [whatwg] window.close() and user-initiated <a target=_blank> ( ( 版)) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-June/036333.html

[15] Web Applications 1.0 r7393 Better define window.close() and how to close tabs. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7392&to=7393

[18] Web Applications 1.0 r7977 Define window.close; update the list of members exposed cross-origin on Window to match reality ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7976&to=7977

[16] Web Applications 1.0 r7984 Sandboxing: prevent pages from closing their top-level browsing context (unless they can navigate it, in which case, whatever) ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7983&to=7984

[21] Web Applications 1.0 r8047 Change how window.close() decides what you can close to make more sense. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8046&to=8047

[17] Web Applications 1.0 r8622 Doesn't make much sense to window.close() an iframe... ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8621&to=8622

[51] document handling: error on serialising window of discarded browsing … (andreastt著, ) https://github.com/w3c/webdriver/commit/5f1fbbb03e2b7b2458ee5da88b4f3dc32be06bd6

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

[13] Editorial: cleanup close a browsing context and prompt to unload (annevk著, ) https://github.com/whatwg/html/commit/b714a7bc124bf0e8828b2adc2aa0b672d96a1dbd

[53] document.open() simplifications, part 1 (TimothyGu著, ) https://github.com/whatwg/html/commit/6f769b8089a843066aa19f5991405bf4c84458b3

[69] Fix Window's close(d) members (annevk著, ) https://github.com/whatwg/html/commit/37b1ce5ed31725fa7b3c64e27e3cc10aa15a791f

[56] Behavior of window.close() · Issue #4405 · whatwg/html () https://github.com/whatwg/html/issues/4405

[58] Clarify Window object's close(), closed, et al · Issue #4363 · whatwg/html () https://github.com/whatwg/html/issues/4363

[59] Cleanup Window's close(d) members by annevk · Pull Request #4402 · whatwg/html () https://github.com/whatwg/html/pull/4402