iframeの属性を再処理

フレーム (Web ページ)

[24] フレーム (frame) は、文書中に他の文書を埋め込むものです。 フレームを表す閲覧文脈を、入れ子閲覧文脈といいます。

著者および管理者は、法令に関する事項の正確性を一切保証しません。 本項の内容は自己責任でご利用ください。

目次

  1. 仕様書
  2. 言語
  3. 閲覧文脈包含子
  4. 処理
  5. 利用者インターフェイス
  6. セキュリティー
  7. 法令との関係
    1. フレームによる無断埋め込み
  8. 関連
  9. 歴史
    1. フレームの誕生
    2. NN3
    3. HTML4
    4. §
    5. HTML5

仕様書#

言語#

[7] フレームに関連する次の要素があります。

[68] フレーム要素

[47] このうち「★」が閲覧文脈包含子となり得るものです。

閲覧文脈包含子#

[45] 入れ子閲覧文脈の「要素に相当するものを、 (えつ) (らん) (ぶん) (みゃく) (ほう) (がん) () (browsing context container) >>44 といいます。 フレームを作る要素 (例えば iframe 要素) に当たります。

[46] 閲覧文脈包含子は、次の状態を持ちます。

入れ子閲覧文脈
内容文書


[82] 閲覧文脈閲覧文脈 (ほう) (がん) () (container) は、 閲覧文脈包含子であって入れ子閲覧文脈閲覧文脈であるようなものです。 そのような閲覧文脈包含子がなければ null です。 >>44

[84] 閲覧文脈閲覧文脈 (ほう) (がん) () (ぶん) (しょ) (container document) は、 次のものです。 >>44

  1. [85] 閲覧文脈包含子null の場合、
    1. [86] null を返します。
  2. [87] それ以外の場合、
    1. [88] 閲覧文脈包含子節点文書を返します。

[89] 簡単に言えば iframe 要素が含まれている文書を指しています。 iframe 要素影木に含まれる場合であっても、 影を含む根たる文書となります。

[83] かつては nested through と呼ばれていました >>55, >>49HTML Standard の改定で変更されました >>19

[78] 文書文書埋め込んでいる文書 (embedding document) は、 文書閲覧文脈包含子文書です。 >>77

[79] UIR でもこの語が使われています。

[80] 文書閲覧文脈がない場合の挙動は仕様書に明記されていません。 Does settings prohibit mixed security contexts?文書埋め込んでいる文書を持つか否かで分岐します。 閲覧文脈null の場合、 埋め込んでいる文書null と解するべきでしょう。


[90] 関係して、 入れ子閲覧文脈閲覧文脈との親子関係に、 子供閲覧文脈等があります。

処理#

[62] iframe 要素frame 要素要素文書に挿入されたら、次のようにしなければなりません >>51, >>20

  1. [27] 文書閲覧文脈を持たなければ、停止します。
  2. [28] 要素入れ子閲覧文脈を、閲覧文脈の作成の結果に設定します。
  3. [50] 名前を、要素name 属性値に設定します。
  4. [29] 要素入れ子閲覧文脈閲覧文脈名を、 名前null なら空文字列、それ以外なら名前に設定します。
  5. [30] 属性の処理を初回実行します。

[94] name="" 属性値閲覧文脈名に反映されるのは、 この閲覧文脈の作成の時点です。 その後の属性値の変更は反映されません。 (以前は反映される仕様でした。 <iframe name> )

[63] iframe 要素frame 要素要素文書から削除されたら、次のようにしなければなりません >>51, >>20

  1. [52] 要素入れ子閲覧文脈null でないなら、
    1. [53] 要素入れ子閲覧文脈について、閲覧文脈を捨てる処理を実行します。
    2. [54] 要素入れ子閲覧文脈を、 null に設定します。

[64] 文書のunloadではなく文書を捨てるが実行されます。

[21] 属性の変更時には、次に示す属性の処理が呼び出されます。 iframe, frame

[67] iframe属性の処理 (process the iframe attributes) /frame属性の処理 (process the frame attributes) は、 要素について、 次のようにしなければなりません >>51, >>20

  1. [95] 要素入れ子閲覧文脈活性文書completely loadedの場合、
    1. [96] 置換を、に設定します。
  2. [97] それ以外で、要素入れ子閲覧文脈セッション履歴文書を1つだけ含み、 その初期「about:blank」文書であるの場合、
    1. [98] 置換を、に設定します。
  3. [99] それ以外の場合、
    1. [100] 置換を、に設定します。
  4. [37] 要素iframe で、 要素srcdoc 属性があれば、
    1. [31] 次の通り navigate します。
      navigate する閲覧文脈
      要素入れ子閲覧文脈
      新しい資源
      [32] 応答
      URLリスト
      (about:srcdoc)
      HTTPS状態
      要素節点文書HTTPS状態
      CSPリスト
      要素節点文書CSPリストclone
      ヘッダーリスト
      Content-Type
      text/html
      本体 (文字列)
      要素srcdoc 属性値
      始点閲覧文脈
      要素節点文書閲覧文脈
      置換有効
      置換
      iframe srcdoc文書
  5. [36] それ以外で、要素src 属性が無く、本処理が初回実行なら、
    1. タスクタスクキューに追加します。
      タスク
      タスク源
      DOM操作タスク源
      処理
      1. [42] 要素iframe なら、
        1. iframe load event steps を実行します。
      2. それ以外なら、
        1. 単純イベントを発火します。
          単純イベント
          イベント型
          load
          イベント対象
          要素
  6. それ以外なら、
    1. URL を、 about:blank に設定します。
    2. 要素src 属性があり、値が空文字列以外なら、
      1. 要素の基底URLに対して src 属性値URLの解決を行います。
      2. 成功なら、 URL を、解決した URL に設定します。
    3. [41] 祖先閲覧文脈活性文書文書の番地URL が同じものがあるなら、ここで停止します。ただしここで URLの比較に当たり素片識別子は無視します。
    4. navigate します。
      新しい資源
      要求
      [58] 要求
      URL
      URL
      参照元ポリシー
      要素iframe 要素の場合、 要素referrerpolicy 属性の状態
      navigate する閲覧文脈
      要素入れ子閲覧文脈:始点閲覧文脈:要素節点文書閲覧文脈
      置換有効
      置換
[23] frame 要素の2回目以降の呼び出しで src 属性が指定されていない場合 (>>42) についてなぜか HTML Standard では規定がありません。

利用者インターフェイス#

[26] sandbox

[69] Webブラウザーによっては、フレームを取り出して最上位閲覧文脈として表示する機能がメニューにあります。

[70] とても便利なのに、ついてない Webブラウザーもあって困ったりします。

[71] Webページによってはフレーム前提で JavaScript などが作られていて、単独で正しく表示できないかもしれませんが。

[72] sandbox で制限されている場合、 最上位閲覧文脈とすると制限が解除されて危険な場合もあります。 (が、そもそも Webアプリケーションとして脆弱で好ましくない状態です。)

セキュリティー#

[22] sandboxX-Frame-Optionsクリックジャッキング

法令との関係#

フレームによる無断埋め込み#

[14] 偽「松阪市公式HP」 | Okumura's Blog ( 版) http://oku.edu.mie-u.ac.jp/~okumura/blog/node/2354

単に本物の松阪市ホームページをフレームで表示しているだけ

県警によれば「事件性はない」が,刑事事件にならないからといって,民事訴訟だってありうるし,いずれにしても善良な市民のすることではないので,真似しないこと。

新聞記事: http://image.blog.livedoor.jp/info_matsusaka/imgs/0/3/0341de4b.JPG

[15] >>14 単に警察が判断しただけで判例でもなんでもありませんが、 単にフレームとして埋め込んだという事実だけでは問題ないという判断が下されたことは興味深いです。

関連#

[25] パケットとしてのフレーム (WebSocketフレームHTTP/2フレーム) とは無関係です。

歴史#

フレームの誕生#

[9] フレームNetscape Navigator 2.0 が最初に実装しました。

[116] Frames, , http://web.archive.org/web/19970613233354/http://www1.netscape.com/comprod/products/navigator/version_2.0/frames/index.html

[113] Frames -An Introduction, , http://web.archive.org/web/19970613213437/http://www1.netscape.com/assist/net_sites/frames.html

[115] Frame Basics, , http://web.archive.org/web/19970613222244/http://www82.netscape.com/assist/net_sites/frame_syntax.html

[114] Frame Implementation Notes, , http://web.archive.org/web/19970613222258/http://www82.netscape.com/assist/net_sites/frame_implement.html

[121] WWW-HTML Jul-Sep 1995: A proposal for addition to HTML 3.0: Frames, , https://web.archive.org/web/19970728153627/http://www.eit.com/goodies/lists/www.lists/www-html.1995q3/0588.html

[124] >>121

This document is designed to be viewed using <b>Netscape 1.2</b>'s
Frame features. If you are seeing this message, you are using
a frame <i>challenged</i> browser.

ほう、この時代には 2.0 でなく 1.2 になる予定だったのかあ。

[125] Wayback Machine, https://web.archive.org/web/19970728153627/http://www.eit.com/goodies/lists/www.lists/www-html.1995q3/0588.html

[126] ところが >>121, >>125>>125 には

Netscape recently announced their new browsers, the Netscape Navigator 2.0 and Netscape Navigator Gold 2.0.

とある。2.0 が出ると発表されていたわけだ。

[127] ということは >>124 は古い社内情報が例文に残ったと考えるべきなのか、 それとも何かの typo なのか。

[117] HTML要素概説
要素名
frameset
要素名
frame
日付
説明
頃、 Netscape Navigator 2.0 は、 frameset, frame を実装した。 FrameBasics Netscape Communications Corporationwww-html に仕様案を投稿した。 >>129 現行仕様である。
出典
[130] HTML要素概説
要素名
frame
参照
iframe
参照
include

NN3#

[120] Welcome to Netscape Navigator 3.0, , https://web.archive.org/web/20020630200918/http://wp.netscape.com/eng/mozilla/3.0/relnotes/windows-3.0.html#Layout

HTML4#

[133] Cougar には

The frame tags will probably be added

once we have an agreed definition for them.

とあって、フレーム機能は含まれないものの、追加すること自体は合意されていた模様。

[131] Cougar DTDフレーム機能が追加されているものの、 これは HTML ERB の公式のものではなさそう。 Cougar

[132] >>131 では Netscape の提案がほぼそのまま取り込まれていた。

[134] Cougar 時代に実際にフレームが追加されたことは確認できない。

[140] フレームのみの WDに公開されている。 >>139

[119] この版ではほぼ Netscape の仕様がそのまま取り込まれているが、 noframesbody 内でも使えることになっているなど、 細部は違う。

[136] HTML 4.0 となった最初の WD にはフレームが追加されている。 >>135

[137] その WD に付属するDTD の先頭は >>133 の文言が差し替わって

The frame tags have been added in acknowledgement of their

widespread deployment.

となっている。

[118] HTML要素概説
要素名
frameset
要素名
frame
要素名
noframes
日付
説明
Cougar DTD の注釈に、 フレームの構想がある。 HTML4-19960710
[111] HTML要素概説
要素名
frameset
要素名
frame
要素名
noframes
要素名
iframe
日付
説明
フレーム仕様>>145frameset, frame, iframe, noframes がある。
出典
注釈

[101] HTML4HTMLフレーム機能を初めて標準化しました。

[104] 一般的には HTML4フレームを好ましからざる機能の扱いにしたと認識されていますが、 実際はそう単純でもありません。

[105] HTML4 には厳密DTD移行用DTDフレーム集合DTDの3つの DTD (≒ 3つの適合水準) を用意していまいた。 このうち厳密DTD移行用DTDの違いは非推奨の機能を含まないか含むかの違いです。

[106] フレーム集合DTDは、移行用DTDフレーム機能を有効にする形で実装されていました。 つまり移行用DTDの機能をすべて含んだうえで、フレーム用のモードになっていました。

[107] 組み合わせ上は、厳密DTDをベースにフレームを有効にした DTD も作れたはずですが、実際には提供されませんでした。

[108] それではフレーム機能が移行用DTD固有の他の機能と同じように非推奨にされていたかといえば、 そうでもありません。フレーム集合DTD固有の要素非推奨とされていません >>103

[109] また、厳密DTDの説明には

The HTML 4.01 Strict DTD includes all elements and attributes that have not been deprecated or do not appear in frameset documents.

とあり、非推奨の機能「または」フレーム集合文書に出現しない機能と敢えて並列に示されていて、 フレーム集合固有の要素非推奨となっていないのがミスではなく意図的であることをうかがわせます。

[110] ところで、この引用文は本来は「フレーム集合でしか使わない要素以外を含む」 と書くべきなのに、「フレーム集合文書に出現しない要素を含む」と書いていて、 意味がおかしくなってしまっています。 実際は厳密DTD要素body を除きすべてフレーム集合DTDでも使えます。

[111] iframe 要素noframes 要素非推奨ではないにも関わらず、 移行用DTDフレーム集合DTDでは使えるのに厳密DTDでは使えません。 このような性質の要素はこの2つだけです。

[112] 索引では前者が「L」、後者が「F」となっています。凡例の説明が不十分ですが、 どちらも「L」であるべきです。 >>103

#

[8]HTML WGXFrames を提案しましたが、受け入れられませんでした。

[3] フレームの大きさを noresize で固定する奴、 あれが激しく使いづらいですよねぇ。 糞著者は自分と違った大きさの窓で読んでる人のことも考えて欲しい。 Scroll bar 消す奴も同罪。

これ、ブラウザ側に無効化機能がついていないのも不思議。 (Mr.Anonymous 2004-05-27 13:01:32 +00:00)

[4] HTML のフレームは presentation だけで semantics がないという問題を抱えているので、 こんなのを考えてみた。

<frameset
  xmlns:docs="http://profile.example/">
  <frame rel="docs:contents"
    src="toc"/>
  <frame rel="docs:body"
    src="page1"/>
</frameset>

フレーム内の文書では、 <anchor href="page2" rel="next docs:body">Next</anchor> とでもしておきます。

rel 属性は QName 並びで、リンクを辿る時には target 属性のように作用します。フレームの rel 値と一致するものが見つかれば、そこに表示すると言う寸法。

(Mr.Anonymous 2004-05-27 13:09:08 +00:00)

[5] rel 属性の中に一つもフレームと一致するものがなければ、 現在の文書(群)とは関係のない文書へのリンクということで、 _top なり _blank なりで表示すれば OK (どちらにするかはスタイルシートで制御)。 (Mr.Anonymous 2004-05-27 13:11:57 +00:00)

[6] frameは本当に便利か - 駄的HTML改善計画 http://car.s35.xrea.com/better/frame.php

[10] Frames (2007-02-28 00:19:09 +09:00 版) http://web.archive.org/web/19970613221220/www82.netscape.com/comprod/products/navigator/version_2.0/frames/index.html (名無しさん)

[11] >>10 みてもやっぱり、アイディアはよかったと思うんだけどね。。。 (名無しさん 2007-02-27 15:34:11 +00:00)

[12] MAMA: Frames - Opera Developer Community ( 版) http://dev.opera.com/articles/view/mama-frames/

[13] しかし CSS を使ったいわゆる擬似フレームは、結構メジャーになったとはいえ、 いまいちなんか微妙なんですよねー。

[122] Terra Informatica Software, Inc., , https://web.archive.org/web/20110101081723/http://www.terrainformatica.com/htmlayout/logfile.whtm

HTML5#

[16] HTML5: Frames — Anne’s Weblog ( 版) http://annevankesteren.nl/2009/02/html5-frames

[17] 2009年になってようやく初めて、 フレームレンダリングHTML5 仕様書で正確に定義されました。

[18] (X)HTML5 Tracking ( 版) http://html5.org/tools/web-apps-tracker?from=2758&to=2759

[19] Web Applications 1.0 r8518 Be more explicit about viewport rendering sizes (rendered and not) ( ( 版)) http://html5.org/tools/web-apps-tracker?from=8517&to=8518

[33] Add 'HTTPS state' to settings objects · whatwg/html@6de5241 ( 版) https://github.com/whatwg/html/commit/6de524157fcf341e10efb3eec634bcf7325e6ee4

[34] Add and populate global object's "CSP list" · whatwg/html@479dfbf ( 版) https://github.com/whatwg/html/commit/479dfbf1ff68b746ed3f81cc7415165e3342709e

[35] Move 'HTTPS state' from Window to Document · whatwg/html@68390ce ( 版) https://github.com/whatwg/html/commit/68390cea99f9f19881a16e1c8adaf1b130b4d1cc

[38] Remove <iframe seamless> · whatwg/html@1490eba ( 版) https://github.com/whatwg/html/commit/1490eba4dba5ab476f0981443a86c01acae01311

[39] URLs are parsed and produce records · whatwg/html@30bc255 ( 版) https://github.com/whatwg/html/commit/30bc2557105ad62881ec9670f253febbc9761b44

[40] Add recursion check to frame elements · whatwg/html@edb786b ( 版) https://github.com/whatwg/html/commit/edb786b16cf5690fe9211fb28fb29cded2249dc1

[43] Regression fix: define source browsing context for iframe and frame ( (annevk著, )) https://github.com/whatwg/html/commit/a714902e66d4d9d967d7e3e7505c6fdfb365015d

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

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

[56] Set referrer policy better for <iframe srcdoc> documents (domenic著, ) https://github.com/whatwg/html/commit/5d7c532fc9aa275bd3b12d469b9841c0bad4f50d

[57] Integrate referrerpolicy for a, area, iframe, and link elements (estark37著, ) https://github.com/whatwg/html/commit/2e955e66ae7f815efe09ccac6445cfbdcbf643ab

[59] Honor srcdoc document referrer policies when set (estark37著, ) https://github.com/whatwg/html/commit/3147414111d134ecd844d9796aa6fc7c1979c98b

[60] Regression fix: run iframe load event steps immediately (annevk著, ) https://github.com/whatwg/html/commit/3784c5375a36e19373982984ff761b491125a5da

[61] Make <frame> fire load synchronously with "completely loaded" (annevk著, ) https://github.com/whatwg/html/commit/16de123059bd4b3660677fb4fdc03e2053815482

[65] frame and iframe have different load-event-firing behaviors · Issue #3492 · whatwg/html () https://github.com/whatwg/html/issues/3492

[66] Make <frame> fire load synchronously with "completely loaded" by annevk · Pull Request #3495 · whatwg/html () https://github.com/whatwg/html/pull/3495

[73] Clone <iframe srcdoc>'s node document's CSP list (annevk著, ) https://github.com/whatwg/html/commit/ebf6d404858bd3d75ec29b4899866935a74c6dc6

[74] What does it mean to alias a policy from a CSP list? · Issue #207 · w3c/webappsec-csp () https://github.com/w3c/webappsec-csp/issues/207

[75] Is srcdoc aliasing its parent's CSP or copying it? · Issue #2594 · whatwg/html () https://github.com/whatwg/html/issues/2594

[76] Clone <iframe srcdoc>'s node document's CSP list by annevk · Pull Request #4083 · whatwg/html () https://github.com/whatwg/html/pull/4083

[81] Give browsing context an explicit container (annevk, , ) https://github.com/whatwg/html/commit/7b4964ad0a953b05738afc66600fa47a4dc8045d

[91] "nested through" usage is wrong · Issue #4409 · whatwg/html () https://github.com/whatwg/html/issues/4409

[92] Give browsing contexts an explicit container by annevk · Pull Request #5091 · whatwg/html () https://github.com/whatwg/html/pull/5091

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

[123] [e] (0) Use [Supplemental] instead of [XXX], in preparation for WebID… (Hixie, , ) https://github.com/whatwg/html/commit/20b3eed1434792acab04f71c72b1fa849e47a616#diff-41cf6794ba4200b839c53531555f0f3998df4cbb01a4d5cb0b94e3ca5e23947d