この記事は HTML アドベントカレンダーの 15 日目の分です。
iframe
要素 のsrcdoc
属性の値に HTML 文書のソースコードを記述すると、その HTML 文書を埋め込んだフレームが生成されます。ここで、埋め込まれた HTML 文書の URL はどうなっているでしょうか。
<!-- iframe 要素を含む文書の URL は https://www.example.com/ であるとする。 -->
<iframe srcdoc="
<a href="foo?bar=42&amp;baz=23">Link</a>
<script>
console.log(location.href);
// => "about:srcdoc"
console.log(document.querySelector('a').href);
// => "https://www.example.com/foo?bar=42&baz=23"
</script>
"></iframe>
埋め込まれた文書の URL は about:srcdoc
ですが、その文書内のリンクにおいては「iframe
要素を含む文書の URL」を基底 URL として相対 URL が解決されます。
base
要素を使えば文書の URL と異なる URL を基底 URL として使えますが、srcdoc
属性を使って埋め込まれた文書では base
要素がなくてもそのような状態になっているのですね。<iframe src="about:blank">
で埋め込まれた文書も同様の状態になります。
ちなみに、srcdoc
属性で埋め込まれた HTML 文書では文書型宣言 (<!DOCTYPE html>
) が省略可能であり、省略した場合も標準準拠モードで描画されます。また、title
要素も省略可能となります。html
、head
、body
の各要素の開始タグおよび終了タグはもともと省略可能なため、body
要素の内容が「body
要素内にしか出現しえない要素」から始まるのなら、その要素の開始タグから記述を開始できます。
セコメントをする