write

Document インターフェイス write メソッド、writeln メソッド (DOM)

[82] document.write は、 動作中の構文解析器入力ストリーム文字列を挿入する JavaScript メソッドです。

[83] DOM0 時代には、 document.write文書の内容を任意に書き換える唯一の方法でした。 その後の DOM API の整備により、構文解析器の動作中に限らず文書の任意の部分を書き換えられるようになったため、 document.write は徐々に使われなくなりました。

[84] 構文解析器構文解析の進行中に script 要素スクリプトを実行し、そこから document.write によって入力ストリームスクリプトが介入できるため、 構文解析器の動作が複雑になる要因の1つとなっています。

document.write によって新たに script 要素を注入することも可能です。

仕様書

処理

[62] Document インターフェイスwrite メソッドは、 次のようにしなければなりません >>10

  1. [64] 引数群を、指定されたすべての引数DOMString として解釈した結果に設定します >>10
  2. [76] 入力を、空文字列に設定します。
  3. [100] 引数群の各引数について、順に、
    1. [101] 入力の末尾に引数を追加します。
  4. [97] 文脈オブジェクト入力について、 document write steps を実行します。 例外投げられたら、再び投げます。

[73] Document インターフェイスwriteln メソッドは、 次のようにしなければなりません >>10

  1. [102] 引数群を、指定されたすべての引数DOMString として解釈した結果に設定します >>10
  2. [103] 入力を、空文字列に設定します。
  3. [104] 引数群の各引数について、順に、
    1. [105] 入力の末尾に引数を追加します。
  4. [106] 入力の末尾に U+000A を追加します。
  5. [107] 文脈オブジェクト入力について、 document write steps を実行します。 例外投げられたら、再び投げます。

[96] document write steps は、文書入力を次のようにします。

  1. [65]
    ... のいずれかの場合、
    1. [90] InvalidStateError 例外を投げ、ここで停止します >>10
  2. [67]
    ... のいずれかの場合、
    1. [68] 文書ignore-opens-during-unload counterか、 文書ignore-destructive-writes counterの場合、
      1. [99] ここで停止します >>10
    2. [69] 文書について、文書を開く手順群を実行した結果に設定します >>10
  3. [72] 文書構文解析器入力ストリームに対し、 文書構文解析器挿入点の直前に、 入力を挿入します >>10
  4. [77] 文書pending parsing-blocking script がない場合、
    1. [78] 文書構文解析器について、 字句化器挿入点に達するか、木構築段階構文解析器abort するまで、構文解析器を動作させます。 (script 終了タグがあると、 abort することがあります。) >>10
[63] 文書構文解析中なら、ここで構文解析器が再帰的に動作させられることがあります。

[9] 文書ignore-destructive-writes counter を持ちます。 その初期値は0です。 >>10

[79] 実際の Webブラウザーは、 script nesting levelなら (スクリプト内からの document.write 呼び出しなら) reload override buffer に追記しないようです。 (そうしないと再読込後に document.write された部分が二重になってしまいます。)

文書の適合性への影響

[112] 文書の適合性を参照。

歴史

HTML 4

[1] 仕様書:

[2] HTML 4 の 18.2.4 は文書読込み時に実行されるスクリプトによる文書内容の動的な編集について触れています。 そこでは document.write はその実現手段の一例として挙げられていますが、 実用的なレベルで存在したもので該当するのは他になかったでしょうし、 DOM が整理される以前の規定ですから、 document.write と HTML 文書・UA の関係に関する規定と捉えてよいでしょう。 また、一般の DOM による操作等は想定範囲外でしょうから、 拡大して解釈することには慎重であるべきと考えられます。

さて、 18.2.4 によれば、文書の動的な編集は次の通りモデル化できるそうです。

  1. すべての script が、 文書の読込まれる順序で評価されます。
  2. SGML CDATA を生成する script 要素中のスクリプト構造がすべて評価されます。 その生成文を結合したものが文書中の script 要素の場所に挿入されます。
  3. 生成された CDATA が再評価されます。

このモデルは、 SGML 構文解析器で HTML 文書から木構造を抽出し、 それを HTML 仕様書の規定する意味と表現によってレンダリングするという SGML 的に本来あるべき UA の処理方法ではなく、 HTML 文書を適当に読込みながら適当に解析しつつ適当にレンダリングし続けるという WWW ブラウザの伝統的な処理方法に依拠しているように思えます。

[18] HTML 4 仕様書に示された例によれば、

 <TITLE>Test Document</TITLE>
 <SCRIPT type="text/javascript">
     document.write("<p><b>Hello World!<\/b>")
 </SCRIPT>

 <TITLE>Test Document</TITLE>
 <P><B>Hello World!</B>

という HTML マークと同じ効果を持ちます。効果という曖昧な言葉を使っているため、 何を指しているのか (レンダリング結果? 出来上がる構造?) はっきりとはしませんが、 ともかくある意味においてこの2例は HTML 的に等価です。

ところが、 SGML 的には、前者は

<HTML><HEAD> <TITLE>Test Document</TITLE>
 <SCRIPT type="text/javascript">
     document.write("<p><b>Hello World!<\/b>")
 </SCRIPT>
</HEAD></HTML>

と等価 (完全に交換可能) であり、

注: これだけでは body 要素がないので、 非妥当です。

後者は

<HTML><HEAD> <TITLE>Test Document</TITLE>
 </HEAD><BODY><P><B>Hello World!</B>
</BODY></HTML>

と等価ですから、両者は異なる構造を持っています。そして、 document.write の結果は常に body 内に書込まれるとか (これは先のモデルと矛盾します。)、 head 内にも p 要素が含められるとか (これは HTML DTD と矛盾します。) の仮定を置かない限り、 適切な結果が得られません。

[3] HTML 4 は、次のようにも述べています。

HTML 文書は、 script 要素の処理の前後いずれにおいても HTML DTD に適合するよう制約されます。

script の出力であるからといって ul 要素の子供に td 要素があっても困りますから、これは当然の規定といえましょう。 しかし、ここで、 >>2 とも関係しますが、 処理後の適合性は何について判断するのかという疑問が生じます。

 <TITLE>Test Document</TITLE>
 <SCRIPT type="text/javascript">
     document.write("<p><b>Hello World!<\/b>")
 </SCRIPT>

>>2 の SGML 的解釈のように

<HTML><HEAD> <TITLE>Test Document</TITLE>
 <p><b>Hello World!</b>
</HEAD></HTML>

となるなら、 (body 要素がないことには目をつぶっても) head 要素内に p 要素を入れることはできないので、非妥当です。しかし、 一旦

 <TITLE>Test Document</TITLE>
 <p><b>Hello World!</b>

となり、更に

<HTML><HEAD> <TITLE>Test Document</TITLE>
 </HEAD><BODY><p><b>Hello World!</b>
</BODY></HTML>

と解釈されるなら、この文書片は妥当です。

また、

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
...
<script type="text/javascript">
  document.write ('<p>');
</script>
A paragraph.
...

は、果たして

<p>
A paragraph?
</p>

でしょうか、

<p></p>
A paragraph?

でしょうか。 (この例はどちらの解釈でも結果は妥当です。)

[4] スクリプト実行結果の静的妥当性検証: >>2-3 のような仕様の解釈に関する問題があるとはいえ、 ある解釈を選べば、ある文書がスクリプト実行後に DTD 妥当であるか否かはスクリプトを実際に実行してみれば容易に判断できます。

一方で、スクリプトを実行せずとも出力が妥当であるかどうかを検証できれば、 (document.write はもう使われなくなっていますが、 CGIスクリプトなどにも応用できますから) 便利かもしれません。 実際にその方法を研究していた人もいたようですが、 良い方法は見つかっていません。

[5] スクリプト実行後の文書構造: 現代の UA などは文書をその構造によって保持しています。 HTML 文書は読込まれると構文解析されて DOM などのモデルによる木として記憶上で持っているか、 持っているかのように操作できるようになっています。

そうすると、 >>2 の規定を忠実に解釈すると、結果の文書木に script 要素は含まれないことになってしまいます。

?? WinIE や Gecko はどうしている ??

また、 document 物体は DOM の Document 界面の物体 (文書要素に対応する物体) として再定義されてしまったので、 文書木が完成する前には存在しない虞があります (解析しながら木を作っているなら、 あるかもしれません)。

[6] 内在事象取扱器document.write すると、 新しい文書が作られてそこに書かれるそうです 18.2.3 Note。 それもまたおかしな話です。

DOM2 HTML

TBW

XHTML1 との関係

[8] 空繰再繰 - application/xhtml+xmlなページでdocument.writeを動作させる #2 (2007-05-01 11:21:43 +09:00 版) http://nyarla.net/blog/javascript-tips6 (名無しさん 2007-05-01 02:24:18 +00:00)

[50] document.writeを完全にDOM仕様にする - 空繰再繰 ( 版) http://blog.nyarla.net/2007/11/17/1

メモ

[7] d:id:quaa (2006-11-28 10:39:05 +09:00 版) http://d.hatena.ne.jp/quaa/20061227#p1 (名無しさん 2006-12-28 01:52:17 +00:00)

[11] http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0Adocument.write%20('%3Cstyle%3E%20p%20%7Bcolor%3A%20green%20%7D%20%3C%2Fst')%3B%0A%3C%2Fscript%3Eyle%3E%0A%3Cp%3EPASS%20iff%20green%3C%2Fp%3E

Firefox 2 も WinIE 7 も PASS。

[12] http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0Adocument.write%20('%3Cstyle%3E%20p%20%7Bcolor%3A%20gr')%3B%0A%3C%2Fscript%3Eeen%20%7D%20%3C%2Fstyle%3E%0A%3Cp%3EPASS%20iff%20green%3C%2Fp%3E

Firefox 2 も WinIE 7 も PASS。

[13] http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cp%3EFAIL%3C%2Fp%3E%0A%3Cscript%20defer%3E%0A%20%20document.write%20('%3Cstyle%3Ep%20%7Bcolor%3A%20green%7D%3C%2Fstyle%3E')%3B%0A%3C%2Fscript%3E%0A%3Cscript%20defer%3E%0A%20%20document.write%20('%3Cp%3EPASS%20iff%20green%3C%2Fp%3E')%3B%0A%3C%2Fscript%3E%20%0A%3Cstyle%3E%0Ap%20%7B%20color%3A%20red%20%7D%0A%3C%2Fstyle%3E

WinIE 7 は DOM view はただしいが、なぜか Rendered view には何もレンダリングされない。

Firefox 2 は FAIL (defer 未対応)。

[14] >>13WinIE 7レンダリングされないのは script が2つあるかららしく、 http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cp%3EFAIL%3C%2Fp%3E%0D%0A%3Cscript%20defer%3E%0D%0A%20%20document.write%20('%3Cstyle%3Ep%20%7Bcolor%3A%20green%7D%3C%2Fstyle%3E')%3B%0D%0A%20%20document.write%20('%3Cp%3EPASS%20iff%20green%3C%2Fp%3E')%3B%0D%0A%3C%2Fscript%3E%20%0D%0A%3Cstyle%3E%0D%0Ap%20%7B%20color%3A%20red%20%7D%0D%0A%3C%2Fstyle%3E ならレンダリングされる。

[15] http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cp%3EFAIL%3C%2Fp%3E%0D%0A%3Cscript%20defer%3E%0D%0A%20%20document.write%20('%3Cstyle%3Ep%20%7Bcolor%3A%20green%7D%3C%2Fstyle%3E')%3B%0D%0A%20%20document.write%20('%3Cp%3EPASS%20iff%20green%3C%2Fp%3E')%3B%0D%0A%3C%2Fscript%3E%20%0D%0A%3Cscript%3E%0D%0A%20%20document.write%20('%3Cstyle%3Ep%20%7B%20color%3A%20red%20%7D%3C%2Fstyle%3E')%3B%0D%0A%20%20document.write%20('%3Cp%3EFAIL%3C%2Fp%3E')%3B%0D%0A%3C%2Fscript%3E

document.write というより defer のテスト。 WinIE 7 は PASS。

後の script 内に alert() を入れれば、 ちゃんと後の script も実行されていることが確認できる。

[16] http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0A%20%20document.write%20('%3Cscript%3E%20document.write%20(%22aa%22)%3B%20%3C%2Fsc')%3B%0A%20%20document.write%20('ript%3E')%3B%0A%3C%2Fscript%3E

Firefox 2 でも WinIE 7 でも、 script 内の script が実行され、aaレンダリング&#65379;&#65379;されます。 HTML 5構文解析算法でも、ややこしいですがおそらく、 aa と&#65378;&#65378;レンダリング]]されるのが正しい動作です。 (1つ目の [document.write によって行われる構文解析で、与えられた&#65378;&#65378;引数]]の末尾に到達したところで、 挿入点に到着したということで字句化器が停止します。 木構築段階script 開始タグが現れると文字字句を集め続けますが、 それは字句化器が停止したところで一旦終わるので、 </script 終了タグ&#65379;&#65379;の直前までいきます。ここで、 document.write返るのですが、 それによって外側の構文解析が再開されます。そして、 次の字句script終了タグになるので、 木構築段階script 開始タグの処理の続きで、スクリプトが実行されます。)

[17] http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0A%20%20document.write%20('%3Cstyle%3E%20p%20%7B')%3B%0Aw(document.documentElement.innerHTML)%3B%0A%20%20document.write%20('color%3A%20gree')%3B%0Aw(document.documentElement.innerHTML)%3B%20%0A%20%20document.write%20('n%20%7D')%3B%0A%3C%2Fscript%3E%3C%2Fstyle%3E%3Cp%3Exxxx

WinIE 7 でも Firefox 2 でも、緑のxxxxレンダリングされます。

[19] http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0A%20%20document.write%20('%3Cstyle%3E')%3B%0Aw%20(document.documentElement.innerHTML)%3B%0A%20%20document.write%20('color%3A%20gree')%3B%0Aw%20(document.documentElement.innerHTML)%3B%20%0A%20%20document.write%20('n%20%7D')%3B%0A%3C%2Fscript%3E%3C%2Fstyle%3E%3Cp%3Exxxx%0A%3Cscript%3E%0Aw%20(document.documentElement.innerHTML)%3B%20%0A%3C%2Fscript%3E%0A%3Cpre%3E%0Axxxx

document.write による追加分が DOM に反映されるのはいつか? (ここでは innerHTML を使用。)

(名無しさん)

[20] >>19 WinIE 7style 要素sheet 属性null になっているようです。 (名無しさん)

[21] >>20 訂正: styleSheet 属性。 (名無しさん)

[22] >>19 Opera 9.27、Safari 3.1.1 では、 WinIE 7 同様、終了タグを処理するまでは空のままのようです。 sheet 属性は空のスタイル・シートになっているようです。 (名無しさん)

[23] >>22 sheet 属性の指すスタイル・シート終了タグが処理されるまでずっと空のままのようです。

(名無しさん)

[24] document.write ('<pre>\na</pre>') http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0D%0A%20%20document.write%20('%3Cpre%3E%5Cna%3C%2Fpre%3E')%3B%0D%0A%3C%2Fscript%3E

WinIE 7, Firefox 2, Opera 9.27, Safari 3.1.1 のいずれも、 開始タグ直後の改行を無視。 (名無しさん)

[25] document.write ('<pre>'); document.write ('\na</pre>') http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0A%20%20document.write%20('%3Cpre%3E')%3B%0A%20%20document.write%20('%5Cna%3C%2Fpre%3E')%3B%0A%3C%2Fscript%3E

>>24 の4ブラウザ中、Firefox 2 だけは改行を無視せず。 (名無しさん)

[26] document.write ('<pre>', '\na</pre>'); http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0A%20%20document.write%20('%3Cpre%3E'%2C%20'%5Cna%3C%2Fpre%3E')%3B%0A%3C%2Fscript%3E

これなら Firefox 2 も改行を無視する。 (名無しさん)

[27] document.writeln ('<pre>'); document.write ('a</pre>'); http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0A%20%20document.writeln%20('%3Cpre%3E')%3B%0A%20%20document.write%20('a%3C%2Fpre%3E')%3B%0A%3C%2Fscript%3E

だけどこっちは Firefox 2 が改行無視しない。 (名無しさん)

[28] Opera 9.27 と Safari 3.1.1 の結果

>>11>>12 PASS

>>13>>15 FAIL (defer 未対応)

>>16 同じ (実行される)

(名無しさん)

[29] >>19 みたいなことを script 要素を書き出す場合でやってみた http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0Aw%20(document.documentElement.innerHTML)%3B%0A%20%20document.write%20('%3Cscript%3E%20document.')%3B%0Aw%20(document.documentElement.innerHTML)%3B%0A%20%20document.write%20('write%20(%22a%22)%3B%20%3C%2F'%20%2B%20'script%3E')%3B%0Aw%20(document.documentElement.innerHTML)%3B%0A%3C%2Fscript%3E

4ブラウザとも、 script 要素innerHTML に現れるのは終了タグが処理されたあとのようです。

この例だと Safari だけは3番目の w で生成された script 要素によって書き込まれた a が反映されていないのですが、 これはその script 要素が実行されていないわけではなく、 文字データを書いても次のタグなどが現れるまで DOM に追加されないという (Safari だけの) 動作のためのようです。 (名無しさん)

[30] >>29

書き出される script 要素が実行される時点での innerHTML は? http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0D%0A%20%20document.write%20('%3Cscript%3E%20w%20(document.documentElement.innerHTML)%3B%20document.')%3B%0D%0A%20%20document.write%20('write%20(%22a%22)%3B%20%3C%2F'%20%2B%20'script%3E')%3B%0D%0A%3C%2Fscript%3E

書き出された script 要素DOM に追加された状態の innerHTML が出てくるようです。 (名無しさん)

[31] >>30 は4ブラウザとも。 (名無しさん)

[32] script の途中からが外側の script 要素の後にいっていてもよいのか? http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0A%20%20document.write%20('%3Cscript%3E%20w%20(document.documentElement.innerHTML)%3B%20document.')%3B%0A%20%20document.write%20('write%20(%22a')%3B%0A%3C%2Fscript%3E%22)%3B%20%3C%2Fscript%3E

4ブラウザともおk (script 要素の続きとみなす) のようです。 (名無しさん)

[33] わけがわからないくらい複雑な例 with script src http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%20src%3D%22javascript%3A'%20document.write%20(%26quot%3Baaaaa%26quot%3B)%3B%20'%22%3E%3C%2Fscript%3E%0A%3Cscript%3E%0A%20%20document.write%20(%22%3Cscript%3Edocument.write%20('%3Cscript%20src%3Djavascript%3A%26apos%3Bdocument.write(%26quot%3Baaaaa%26quot%3B)%3B%26apos%3B%3E%3C%2F'%2C%20'script%3E%3Cscript%3E%20document.wri')%3B%3C%2F%22%2C%20%22script%3E%22)%3B%0A%3C%2Fscript%3Ete%20('ccc')%3B%20%3C%2Fscript%3E

Firefox 2 では、最初の script 要素があるかないか (javascript: URI を使っていることに起因している模様)、 Live DOM Viewer 内で見るかどうか、 Live DOM Viewer でも直接入力か permalink 使用かによって結果が変わってくる (2つ目の script による書き込みが反映されたりされなかったりする、というか scriptDOM に現れなかったり、 body が2つでてきたり、よくわからん。) ようです。

Live DOM Viewer かどうかで結果が変わるのは、 Live DOM Viewer 自体が document.write を使っているせいでしょう。

(名無しさん)

[34] >>33 他の3ブラウザはいずれも ccc とだけでてきます。 SafariWinIE は、 src 内の javascript: URI を実行していないようです。 Opera は外部スクリプト内の document.write を実行していないようです。 (名無しさん)

[35] >>34 Operadocument.write を実行しないのではなく、 javascript: URI を実行はするのですが、 最後に得られた文字列を外部スクリプトとみなすのではないようで、 エラーコンソールリンク先のスクリプトを読み込むことができませんとでてきます。 (名無しさん)

[36] http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%20src%3D%22javascript%3A%20document.write%20('x')%3B%20%22%3E%3C%2Fscript%3E%20%20%20

Opera では xbody 要素中にでてきます。

Firefoxsrc 内の javascripot: URI の実行される文脈では文書本体の Global 物体とは違うものを使っているようで、 window にも document にもその他大域変数にもアクセスできません (ReferenceError になります)。 (名無しさん)

[37] Hixie's Natural Log: Tag Soup: Blocks-in-inlines (2008-04-25 22:46:42 +09:00 版) http://ln.hixie.ch/?start=1138169545&count=1 (名無しさん)

[38] Hixie's Natural Log: Why document.write() doesn't work in XML (2008-04-25 22:48:57 +09:00 版) http://ln.hixie.ch/?start=1091626816&count=1 (名無しさん)

[39] Hixie's Natural Log: Tag Soup: appendChild() of a script that calls document.write() (2008-04-25 22:49:24 +09:00 版) http://ln.hixie.ch/?start=1155195074&count=1 (名無しさん)

[40] Index of /tests/adhoc/dom/level0/write (2008-04-25 23:07:32 +09:00 版) http://hixie.ch/tests/adhoc/dom/level0/write/ (名無しさん)

[41] んー、カオス。 (名無しさん)

[42] document.write で始まった CDATA 内容モデル旗とそのスクリプト終了タグの関係は? http://software.hixie.ch/utilities/js/live-dom-viewer/?%3Cscript%3E%0A%20%20document.write%20(%22%3Cstyle%3E%20p%20%7B%22)%3B%0A%20%20w%20(document.documentElement.innerHTML)%3B%0A%3C%2Fscript%3E%20color%3A%20green%3B%0A%3Cscript%3E%0A%20%20document.write%20('%7D%20%3C%2Fstyle%3E')%3B%0A%3C%2Fscript%3E%3Cp%3Exxxx%0A

4ブラウザとも、</script> 以後も内容モデル旗CDATA にしたまま処理を続行するようで、 次の <script> 開始タグ開始タグではなく、 文字データとして処理します。

(名無しさん)

[43] Live Scripting HTML Parser (2008-04-27 20:27:04 +09:00 版) http://suika.fam.cx/www/markup/html/scripting-parser/parser (名無しさん)

[44] Bug 95487 &#8211; JavaScript-generated table never completes (2008-06-18 09:05:55 +09:00 版) https://bugzilla.mozilla.org/show_bug.cgi?id=95487 (名無しさん)

[45] document.write()の実行タイミングをずらす方法 (2008-06-22 15:16:43 +09:00 版) http://p2b.jp/index.php?UID=1153728573 (名無しさん)

[46] 最速インターフェース研究会 :: ページレンダリングを妨げないdocument.writeの実装 (2008-06-22 15:21:04 +09:00 版) http://la.ma.la/blog/diary_200612061928.htm (名無しさん)

[47] Fenrir's BLog: Ajaxでdocument.writeするJavaScriptへの対策 (2008-06-02 14:24:53 +09:00 版) http://fenrir.naruoka.org/archives/000555.html (名無しさん)

[48] 野ログはノロキュアMaxHeart - document.writeをバッファリングするJavaScript (nog 著, 2008-04-18 09:41:41 +09:00 版) http://cureblack.com/20080418.html#p01 (名無しさん)

[49] Javascriptの外部ファイル内でdocument.writeしたら文字化け(Mac IE 4.5編) ( 版) http://www.shtml.jp/mojibake/macie45.html

[51] Web Applications 1.0 r5616 Change how document.write() is ignored.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767 ( ( 版)) http://html5.org/tools/web-apps-tracker?from=5615&to=5616

[52] IRC logs: freenode / #whatwg / 20101013 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20101013

[53] Web Applications 1.0 r6924 More tweaks to the text (including a comment that describes one of the situations in question).Fixing https://www.w3.org/Bugs/Public/show_bug.cgi?id=14275 ( ( 版)) http://html5.org/tools/web-apps-tracker?from=6923&to=6924

[54] [whatwg] HTMLLinkElement.disabled and HTMLLinkElement.sheet behavior ( ( 版)) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-August/037001.html

[55] Web Applications 1.0 r7290 Change how <script> is handled in re-entrant parser situations when there's a blocking style sheet. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7289&to=7290

[56] Web Applications 1.0 r7757 Try to define when document.open() doesn't work more precisely. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7756&to=7757

[57] Web Applications 1.0 r7869 Make document.write() a no-op on non-active documents. ( ( 版)) http://html5.org/tools/web-apps-tracker?from=7868&to=7869

[58] 新暦と旧暦の変換計算(長期) ( 版) http://koyomi8.com/9reki/9rekicgi.htm
[59] action を可変にするために document.write が使われています。なお終了タグは直接 HTML として記述されています。
<SCRIPT Language="JavaScript">
<!--
document.writeln('<form NAME="9reki" method="POST" action="' + CGISERVER + 'cgi/9reki_f.cgi">');
// -->
</SCRIPT>

[60] bug 5562 – 無限にdocument.write()を繰り返してメモリを食いつぶしていくと再パース処理でクラッシュする ( ( 版)) http://bugzilla.mozilla.gr.jp/show_bug.cgi?id=5562

[61] 430574 – Infinite document.write() loop hangs, fills memory, and crashes ( ( 版)) https://bugzilla.mozilla.org/show_bug.cgi?id=430574

[80] IRC logs: freenode / #whatwg / 20150528 ( 版) http://krijnhoetmer.nl/irc-logs/whatwg/20150528

[81] Formalize custom element reactions · whatwg/html@27aa7bc ( 版) https://github.com/whatwg/html/commit/27aa7bc4fa6f168654a8c858f0773e611f679b39

JavaScript

[85] Clarify the note about reentrant parsing in document.write() (domenic著, ) https://github.com/whatwg/html/commit/d6630fe808e48898108dc671025c0bcad5048cc3

[86] Make document.write etc. throw during parsing custom elements (domenic著, ) https://github.com/whatwg/html/commit/00c6fa07bdb9f0d08a28f6c6e1ababca7d08618c

[87] Make document.write etc. throw during parsing custom elements (domenic著, ) https://github.com/whatwg/html/commit/00c6fa07bdb9f0d08a28f6c6e1ababca7d08618c

[94] For users on very slow connections, block document.written scripts · Issue #17 · WICG/interventions () https://github.com/WICG/interventions/issues/17

[95] Editorial: refactor document.open()/write()/writeln() (annevk著, ) https://github.com/whatwg/html/commit/d43b7050b4fe83ebce7724ea005e4707f06a86f7

[108] Allow not executing scripts inserted by document.write() (domenic著, ) https://github.com/whatwg/html/commit/15b258dc74ffe1ba321b81a1c876f129681a97c2

[109] For users on very slow connections, block document.written scripts · Issue #17 · WICG/interventions () https://github.com/WICG/interventions/issues/17

[110] Allow not executing scripts inserted by document.write() by domenic · Pull Request #1400 · whatwg/html () https://github.com/whatwg/html/pull/1400

[111] Intervening against document.write()  |  Web  |  Google Developers () https://developers.google.com/web/updates/2016/08/removing-document-write

[70] document.open() simplifications, part 2 (TimothyGu著, ) https://github.com/whatwg/html/commit/ae7cf0cc1936c6c309d7279c822dffc3af147851

[71] Remove overridden reload concept (TimothyGu著, ) https://github.com/whatwg/html/commit/6440ccae7340ea41d3eb5bf8ff0b3b27363eda85

[74] document.open() simplifications, part 2 by TimothyGu · Pull Request #3946 · whatwg/html () https://github.com/whatwg/html/pull/3946

[75] Allow document.open()/write() to be called on non-active documents (TimothyGu著, ) https://github.com/whatwg/html/commit/ad541d6a5e74f56dccedc56d50750adb65184505

[66] Extend document.open/write to non-active documents · Issue #2827 · whatwg/html () https://github.com/whatwg/html/issues/2827

[91] Allow document.open() to be called on non-active documents by TimothyGu · Pull Request #3977 · whatwg/html () https://github.com/whatwg/html/pull/3977