window.name

閲覧文脈名 (Web)

仕様書

閲覧文脈名

[37] 閲覧文脈は、閲覧文脈名 (browsing context name) を持つことができます。 初期状態では閲覧文脈名はありません。 >>36

[51] 閲覧文脈名は、閲覧文脈包含子要素name 内容属性により決まります。

[50] 閲覧文脈名は、履歴の探索により、活性文書に合わせて変化します。

適合性

[65] 妥当な閲覧文脈名 (valid browsing context name) は、 _ で始まらないない文字列です >>36

name 属性で要求されます。

[67] 妥当な閲覧文脈名またはキーワード (valid browsing context name or keyword) は、 妥当な閲覧文脈名か、 ASCII大文字・小文字不区別_blank, _self, _parent, _top のいずれかと一致するものです >>36

target 属性formtarget 属性で要求されます。 window.open メソッドでも事実上これが求められています。

[73] それ以外の _ で始まる値は、将来の拡張のために予約されています >>36

[39] target 属性name 属性に指定することは禁止されています。しかし指定した場合は、 通常の名前のように扱われます (将来拡張されると異なる動作になるかもしれないため、 禁止されています)。
[75] 妥当な閲覧文脈名が求められる場所 (name 属性) に _blank などのキーワードを指定することは禁止されています。 指定してもそのまま閲覧文脈名として使われますが、 target 属性でそれを使うと特別な意味で解釈されるため、その閲覧文脈を指すために使うことはできません。

[76] 歴史的には、他に _content, _media, _main, _next, _search, _replace といったキーワードがWebブラウザー依存の機能 (二次的閲覧文脈等) のため、 または HTML 以外の Web 関連仕様により用いられていました。

[77] 更に、意味もなく _ から始まる名前を使っている文書も数多く存在しています。

[74] 空文字列は、閲覧文脈名が割り当てられていないことを表すため、 禁止されています。

文脈

[78] window.name IDL属性閲覧文脈名を表します。

[70] 閲覧文脈名は、 Window オブジェクト名前付き特性による他の Window へのアクセスのために使うことができます。

[79] name 内容属性によってその要素入れ子閲覧文脈閲覧文脈名を指定できます。

[80] target 内容属性window.open の第2引数によって navigate する閲覧文脈を指定できます。

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

[34] Window インターフェイスname IDL属性は、 取得器閲覧文脈名を返し、 設定器閲覧文脈名を設定するものでなければなりません。 ただし閲覧文脈名が未設定の時は、空文字列を返さなければなりません>>33

[35] この属性の型は、 DOMString です >>33

フレーム系 name 属性

[52] HTMLframe 要素および iframe 要素、 embed 要素object 要素name 内容属性は、 入れ子閲覧文脈に名前をつけるために使われます >>57, >>63

[68] object 要素フォーム制御子として機能することもありますが、 name 属性制御子名を指定するものではないようです。 ただしプラグインname 属性値フォームデータ集合上の名前として使うことを妨げるものでもないようです。

属性値

[58] iframe 要素 >>57object 要素 >>63name 属性値は、妥当な閲覧文脈名でなければなりません

[72] embed 要素frame 要素name 属性廃止状態なので適合性は規定されていませんが、 指定する場合、同様に妥当な閲覧文脈名であるべきだと思われます。

[56] この属性は省略可能です。省略すると閲覧文脈名はなし (空文字列) となります。

処理

[59] iframe 要素frame 要素object 要素から閲覧文脈の作成が行われる際に、 name 属性があれば閲覧文脈名としなければなりません >>57, >>63, >>71。なければ、空文字列閲覧文脈名としなければなりません >>57, >>63, >>71

[60] iframe 要素frame 要素object 要素name 属性が設定された時には、入れ子閲覧文脈があれば、 入れ子閲覧文脈閲覧文脈名を新しい値に変更しなければなりません >>57, >>63, >>71。削除された時には、空文字列に変更しなければなりません >>57, >>63, >>71

[46] embed 要素から閲覧文脈の作成が行われる際に、 name 属性があれば閲覧文脈名に設定されます。

[47] 後から変更されても反映されないようです。

IDL 属性

[62] HTMLIFrameElement インターフェイスHTMLIFrameElement インターフェイスIDL属性 name は、 name 内容属性反映しなければなりません >>61, >>64DOMString として反映します。

[49] HTMLEmbedElement インターフェイスHTMLObjectElement インターフェイス廃止状態の IDL属性 name は、name 内容属性反映しなければなりません >>48, >>66DOMString として反映します。

関連

[55] name 属性値は、 DOMHTMLCollectiongetElementsByName を通じて要素にアクセスするために使うことができます。

[69] そのような利用も考慮するなら、 一般的なスクリプト言語で名前として使える構文に従った名前を付けるのが得策かもしれません。

歴史

飛び先フレーム名

そもそもフレーム名ってどんな文字が使えるんですか。

最初の文字は、 [A-Za-z] または "_" (予約名) で、2文字目以降は よく分かりません。 SGML (DTD) 的には CDATA です。

気持ち的には _?[A-Za-z]+ なんですかね? ま、現実には何でもあり なんでしょーが。

  • Window-Target = "Window-Target:" FWS target-frame
  • target-frame = 1*ALPHA / special-target / obs-target-frame
  • special-target = "_" 1*ALPHA
  • obs-target-frame = 1*cchar
  • cchar = <A character allowed in SGML (HTML4) CDATA>

HTML4 によると大文字・小文字は区別されません。

Netscape の仕様に拠ると先頭文字は DIGIT でもいい(良かった)模様。 それ以外の文字から始まる時は無視するようです。 特殊名で未定義のときも無視。

[40] http://home.netscape.com/eng/mozilla/2.0/relnotes/demo/target.html

[41] How to target a link to a window ( 版) http://web.archive.org/web/19970613222251/www82.netscape.com/eng/mozilla/2.0/relnotes/demo/target.html

[42] Web Applications 1.0 r7828 Try to clarify browsing context rules ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7827&to=7828

[43] OASIS Open Document Format for Office Applications (OpenDocument) Version 1.2 - Part 1: OpenDocument Schema ( 版) http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#a19_380office_target-frame

[44] Jumping out of the window - how to get rid of frames (Jahn Rentmeister, rentmei@uni-muenster.de 著, 版) http://web.archive.org/web/19990203145328/http://www.uni-muenster.de/WiWi/home/rentmei/html/frames.html

[45] [whatwg] Specify href target with HTTP headers ( ( 版)) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-June/036334.html

HTML4

[1] HTML 4 などの DTD において、 %FrameTarget; は対象フレーム名を表します。

a 要素などの target 属性の値が %FrameTarget; として定義されています。また、 frame 要素や iframe 要素の name 属性の値も、 (DTD 上は直接 CDATA になっていますが) %FrameTarget; と考えて良いでしょう。

[92] HTML 4 仕様書本文では、 iframe 要素型の定義で、 name 属性を独自の定義と frame 要素型での定義の参照の両方としています。 おそらくいずれかが間違いなのでしょうが、幸い、 どちらの name の定義もまったく同じ内容ですから、 問題にはなりません。

[93] この属性非推奨です XHTML 1.0 4.10 (参考)。 代わりに id 属性を使うことができます。

ただし、 nameid では、 属性値に課された制約が異なります。 噂のID問題の項などをご覧下さい。

[94] XHTML 1.0 では将来の版での削除が予告されており、 実際に XHTML 1.1 には name は含まれていません。

[54] この属性の値は CDATA です。 特に名前に制限は無いみたいです HTML 4 16.2.2, 16.5。 大文字・小文字は区別されません HTML 4 16.2.2, 16.5

ただし、名前を参照する側の target 属性の値は %FrameTarget ですから、 それ以外にすると使い辛いでしょう。

フレーム名

[2] DTD においては細かい制限を記述できないため、 %FrameTarget;CDATA として定義されていますが、実際にはその構文には緩やかな制限があります。

[5] HTML 4 (>>3) によれば、

  • frame-target = ALPHA CDATA / special-frame-target

です。なお、大文字・小文字は区別されません。

[6] HTML 4 に従うなら、この構文に合致しない名前は無視します (should)。 実際の UA の挙動は、どんな名前でも受け入れるようです。 漢字や仮名を使ったフレーム名の HTML 文書も実在していたりします。 a 要素の name 属性同様, なんでもありの世界と考えた方が良いでしょう。

[9] フレーム名は HTTP 頭欄 Window-Target の値でもありますから、 HTTP で安全に転送できる ASCII の94個の図形文字の範囲内にした方が良いでしょう。

[11] >>5 Netscape の元の仕様 (>>10) では、最初の文字に数字も許しています。

[19] WebCGM は HTML 4 の予約名に加えて _replace (埋込み CGM 画像内のリンクをたどった時、その画像を置き換える) を定義しています。

[23] SVGWebCGM と同じものを採用しています。 ただし枠名は XML名前であるとしています。

XML 1.0? XML 1.1? 版不特定?

特殊フレーム名

[22]

%FrameTarget説明状態出典
ALPHA CDATAフレーム名による指定W3C 勧告[HTML 4], [WebCGM]
XML 名前フレーム名による指定W3C 勧告[SVG]
_blank新しい無名の窓W3C 勧告[Netscape], [HTML 4], [WebCGM], [OpenDocument], [OOXML]
_content主表示領域 >>8非標準Mozilla
_main主表示領域 >>8非標準WinIE
_media媒体バーECMA 規格WinIE 6+, OOXML
_next
_search検索用表示領域ECMA 規格Mozilla, WinIE 5+, OOXML
_self同じフレームW3C 勧告[Netscape], [HTML 4], [WebCGM], [OpenDocument], [OOXML]
_parent親フレームW3C 勧告[Netscape], [HTML 4], [WebCGM], [OpenDocument], [OOXML]
_replace同じ領域 >>19W3C 勧告[WebCGM]
_top同じ窓全体W3C 勧告[Netscape], [HTML 4], [WebCGM], [OpenDocument], [OOXML]

[7] _parent_top は「親」が存在しなければ _self と同じ意味になります。

HTML 4 は _parent は親 frameset としていますが、 IFRAME 要素の内部で使われた場合はどうなのでしょう。 WinIE でも Mozilla でも、親文書の窓になりました。 HTML 4 の意図は分かりませんが、実態だけ考えれば FRAMESET に限定したのは間違いです。

Netscape の元の仕様 (>>10) も似たような表現ですから、そのままもってきて修正し忘れたのかもしれません。

[8] Mozilla 拡張の _content は、基本的には _self 同様に機能するようですが、例えば Sidebar に表示している頁で使うと通常のブラウザの部分に読み込ませることが出来ます。

WinIE は同様のものとして _main を使っています。 しかしこれはエクスプローラバーでは使えても、通常のブラウザの部分では使えないようです。

Moz も IE も、相手のものは未対応らしく、新窓で開きます。

  • [12] 仕様無視の不思議マーク付けの世界ではフレームの名前に _main (や他の _ で始まる名前) を使っているところもあります。 >>8 はそれへの対処なんでしょうか。 (M$ がそうするとは考えにくいのですが。)
  • [13] >>5 にあるとおり、大文字・小文字は基本的に区別されません。しかし、ほとんどの場合これらの予約名には小文字が使われます。とはいうもののやはり、大文字を使った例も見受けられます。
  • [15] しかし、実際には大文字と小文字を区別する UA もあるようですから、小文字で統一した方が安全です。

[16] 数字のフレーム名ってよく見かけます。そういうのが既定値になっている変な authoring tool でもあるのでしょうか。 (名無しさん 2004-03-29 12:40:40 +00:00)

[17]

13-15 大文字の予約名の実例、はじめてみました。なんだか新鮮。 (名無しさん 2004-06-11 11:09:30 +00:00)

[25] Target Attribute Values (Lachlan Hunt <lachlan.hunt@...> 著, 版) http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/10387 (名無しさん 2007-04-28 04:10:21 +00:00)

[26] [OOXML] は OOXMLVMLtarget 属性

[27] [OpenDocument] は OpenDocumentmeta:target-frame-name 属性

[28] OpenDocumentOOXML も、閲覧文脈名文字の種類に制限はないみたいです (_ も含め、何も言及がありません)。

枠の決定

[20] HTML 4 の附属書には、リンク先文書を表示するを決定する 現在の慣習 (current practice) が説明されています。

[21]

  1. 対象名が >>22 の予約名であれば、その通りに。
  2. リンクが含まれているの中の枠を深さ優先探索 (名前完全一致) で。
  3. 前の窓から後ろの窓に向かって、見つかるまで手順 2. を実行。
  4. 新しい窓を作り、それに対象名を割当てる。

[18] Bug 105693 - W3C HTML 4.01 spec recommends we ignore non-alpha target http://bugzilla.mozilla.org/show_bug.cgi?id=105693

数字で始まるフレーム名や下線ではじまるフレーム名について。

これによると、 _newNC4 で導入されて Gecko にも引き継がれているのだそうで。 (名無しさん 2004-06-28 03:01:41 +00:00)

[24] So, You Want A New Browser Window, Huh? (Joe Burns 著、2005年7月現在) http://www.htmlgoodies.com/tutorials/getting_started/article.php/3479481 (他の内容から90年代後半に書かれたと推測)

<A HREF="http://www.site.com/page.html" TARGET="resource window"> Text Text Text</A>

[31] Window Object 1.0 ( ( 版)) http://www.w3.org/TR/Window/#embedding

[100] Bug 444222 &#8211; window.name/.status can be used as an XSS attack vector (2008-09-15 22:34:02 +09:00 版) https://bugzilla.mozilla.org/show_bug.cgi?id=444222

[32] Web Applications 1.0 r8483 window.name should be the empty string when the name isn't set. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8482&to=8483

[29] [whatwg] Reserved browsing context names ( ( 版)) http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-November/029030.html

[30] [whatwg] Reserved browsing context names ( ( 版)) http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-February/030414.html

関連

[38] target も参照。

[81] Reduce the number of Window objects exposed on the Window object ( (annevk著, )) https://github.com/whatwg/html/commit/ae055fbc49e6b57bbfdc69537af67e8971871c06

[82] RE: Changing window.name behavior (Crispin Cowan著, ) https://lists.w3.org/Archives/Public/public-webappsec/2016Jul/0007.html

[83] Editorial: clean up "traverse the history" (annevk著, ) https://github.com/whatwg/html/commit/b9c90431ad4c8aa583aee1691a6a1bd355b68b53

[84] 444222 – window.name can be used as an XSS attack vector () https://bugzilla.mozilla.org/show_bug.cgi?id=444222

[85] Re: Changing window.name behavior (Mike West著, ) https://lists.w3.org/Archives/Public/public-webappsec/2016Jul/0031.html

[86] Drop the name propagation for the object element's name attribute (foolip著, ) https://github.com/whatwg/html/commit/1d196b35eba203d5f7561c6b2458b990ff0e28fb

[87] Re: Changing window.name behavior (John Wilander著, ) https://lists.w3.org/Archives/Public/public-webappsec/2016Dec/0002.html

[88] Add <base target="x" /> to CSP · Issue #186 · w3c/webappsec-csp () https://github.com/w3c/webappsec-csp/issues/186

[89] Consider not setting browsing context name when noopener/noreferrer are used · Issue #4314 · whatwg/html () https://github.com/whatwg/html/issues/4314

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