カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

document.writeハックに関するメモ

概要: document.writeを完全なDOM対応にするためのメモ。


IT戦記id:amachangさんのエントリ、 とてもシンプルに自分自身が属する script 要素を取得で、 自分自身が属するscript要素が取得する方法が分かった。

最速インターフェース研究会のmalaさんのエントリ ページレンダリングを妨げないdocument.writeの実装document.writeをピンポイントで書き換えて、遅延描画させる方法が分かった。

で、あとはテキストからDOMを構築する方法が分かれば、document.writeを元々の動作を失わせること無く、 DOMに完全対応させることができる。

スクリプトの処理の流れをまとめると、

  1. スクリプト自体が属するscript要素を取得
  2. document.writeを書き換え、そのスクリプトのdocument.writeで書き出されるHTMLテキストを取得
  3. HTMLテキストからDOMを構築する
  4. スクリプト要素が切り替わる、もしくはすべてのdocument.writeが実行され終わった後に生成したDOMノードを追加する

という感じ。

以上のような感じで、document.write(もしくはdocument.writeln)を書き換えると、 MIME-Typeapplication/xhtml+xmlなページでdocument.writeが使えるようになる。 (XHTML2でも多分使える?)

と思うんだけど、僕だと書けそうにない。

Text2DOMはすでにあったりするような気がするんだけど、どうも他のライブラリ群のなかのひとつみたいだったので、 そのまま使うのはちょっと問題があったようななかったような。

まあでも、application/xhtml+xmlなページでdocument.writeが使えるようになるという夢のようなスクリプトまで、 あとちょっとなので、誰かやってくれないかなぁ。

追記:2006-12-07T16:20:00+09:00

とりあえず他人任せはアレなので途中まで書いた。

writer.js

が、肝心のテキストからDOMを生成する部分ができてないので、 動きません(ちなみにテストもしてない)。どこかにないかなぁ。

コードはパブリック・ドメインなので、改造は自由です。 といいつつも、コードが微妙なので、あんまり参考にはならないかも。