[1] [DFN[[RUBYB[文書基底 URL]@en[document base URL]]]]は、[[文書]]の[[基底URL]]です。

* 仕様書

[REFS[
- [11] '''[CITE@en[DOM Standard]] ([TIME[2015-08-25 21:41:23 +09:00]] 版) <https://dom.spec.whatwg.org/#concept-document-base-url>'''
- [2] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-06-15 00:38:15 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#terminology-0>
]REFS]

* 意味

[3] [[文書]][VAR[文書]]の[DFN[[F[[RUBYB[[[文書基底URL]]]@en[document base URL]]]]]]は、次の手順で得られる値です [SRC[>>2]]。
[FIG(steps)[
= [24] [VAR[文書]][[中][文書中]]に [CODE(HTMLa)@en[href]] [[属性]]を持つ 
[CODE(HTMLe)@en[base]] [[要素]]がある場合、
== [25] [VAR[文書]][[中][文書中]]で[[木順]]で最初の
[CODE(HTMLa)@en[href]] [[属性]]を持つ [CODE(HTMLe)@en[base]] [[要素]]の[F[凍結基底URL]]
を返します。
= [26] それ以外の場合、
== [27] [VAR[文書]]の[F[フォールバック基底URL]]を返します。
]FIG]

[4] [[文書]][VAR[文書]]の[DFN[[F[[RUBYB[フォールバック[RUBY[基][き]][RUBY[底][てい]]URL]@en[fallback base URL]]]]]]は、
次のものです [SRC[>>2]]。

[FIG(steps)[
= [18] [VAR[文書]]が[F[[[[CODE(HTMLe)@en[iframe]] [CODE(HTMLa)@en[srcdoc]]文書]]]]の場合、
== [19] [VAR[文書]]の[F[閲覧文脈]]の[F[包含子文書]]の[F[文書基底URL]]を返します。
= [20] それ以外で、[VAR[文書]]の[F[番地][文書の番地]]が [CODE(URI)@en[about:blank]] で、
[VAR[文書]]の[F[閲覧文脈]]の[F[作成子閲覧文脈]]が [[null]] で''ない''場合、
== [21] [VAR[文書]]の[F[閲覧文脈]]の[[作成子基底URL]]を返します。
= [22] それ以外なら、
== [23] [VAR[文書]]の[F[番地][文書の番地]]を返します。
]FIG]

* 解説

[5] [[文書基底URL]]は通常は[[文書]]の [[URL]] ですが、
[CODE(HTMLe)@en[[[base]]]] [[要素]]があればその [[URL]] となり、
[CODE(JS)@en[[[window.open]]]] で開かれた[[文書]]なら元の[[文書]]の[[文書基底URL]]となり、
[CODE(HTMLa)@en[[[srcdoc]]]] なら外側の[[文書]]の[[文書基底URL]]となるわけです。

[7] [CODE(DOMm)@en[[[pushState]]]] により[[文書の番地]]が変更されると、[[文書基底URL]]も変化します。
ただし [CODE(HTMLe)@en[[[base]]]] [[要素]]がある場合は影響しません (>>6)。

[9] [[下位層プロトコル]]の中には[[基底URL]]を指定できるものもありますが、
[[文書基底URL]]の定義ではそのような[[プロトコル]]は想定されていないようです。

;; [[HTTP]] では常に[[対象URL]]が[[基底URL]]になりますから、問題ありません。

* API

[15] 現在の値は、[[文書]]の任意の[[節点]]の [CODE(DOMa)@en[[[baseURI]]]]
[[IDL属性]]で取得できます。

[16] 新しい値を設定するには、 [CODE(HTMLe)@en[[[base]]]] [[要素]]の
[CODE(HTMLa)@en[[[href]]]] [[内容属性]]を (なければ作成して)
設定すればOKです。

* 歴史

[REFS[
- [8] [CITE@en[Web Applications 1.0 r7266     Update handling of the <base>.href IDL attribute and clarify how 'document's base URL' is defined.]]
( ([TIME[2012-08-25 03:52:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7265&to=7266>
- [6] [CITE@en[Web Applications 1.0 r7962     Make <base> elements not be affected by changes by to the document's address]] ([TIME[2013-06-13 04:05:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=7961&to=7962>
- [10] [CITE@en[Tie base URLs to documents. Obsoletes xml:base. Fixes https://www.w3.… · whatwg/dom@8ca4959]] ([TIME[2015-09-03 22:20:44 +09:00]] 版) <https://github.com/whatwg/dom/commit/8ca4959505f531663bc91f064a19762e8b90b810>
]REFS]

[17] [CITE@en[Remove the concept of creator Document so we don't leak a document · whatwg/html@a996f3b]]
([TIME[2016-04-06 17:19:01 +09:00]] 版)
<https://github.com/whatwg/html/commit/a996f3b4982f20697f71a23c919567a638519959>

[28] [CITE@en[Use HTML's "document base URL" concept]]
( ([[Ms2ger]]著, [TIME[2016-06-01 20:25:55 +09:00]]))
<https://github.com/whatwg/dom/commit/60fac5124f26b5ff216bf122036321fb95ac5556>

[HISTORY[
[29] >>28 で削除されるまで、 [[DOM Standard]] には次のような規定がありました。

[13] [[文書]]は、[DFN[[RUBYB[[[基底URL]]]@en[base URL]]]]を持ちます [SRC[>>11]]。

;; [12] [[DOM Standard]] は document の「base URL」、[[HTML Standard]] は
「document base URL」を定義しており、両者は同じものとみられますが、
その関係は明示されていません。
>>14 と >>3 も若干矛盾しています。

[14] [[文書]]の[[基底URL]]の[[既定値]]は、 [CODE(URI)@en[[[about:blank]]]]
です [SRC[>>11]]。
]HISTORY]


[30] [CITE@en[Editorial: nested browsing context is a member, not a type]]
([[annevk]], [TIME[2019-11-27 02:46:03 +09:00]], [TIME[2022-01-18T08:37:47.000Z]])
<https://github.com/whatwg/html/commit/6b737bbc428facf34ec3728c0912cf9e172d0ea4>