document.writeをDOM仕様にする

読了まで:約1分


概要: Javascript のdocument.writeを DOM 仕様にする。


追記:2006-12-16T18:11:00+09:00

document.writedocument.writelnを DOM 仕様にし、 document.writedocument.writelnを使ったコードをMIME-Typeapplication/xhtml+xml なページでほぼそのまま動かせるスクリプトを書きました。

詳しくは [[application/xhtml+xml なページで document.write を動作させる]] を閲覧してください。

追記終了

こんな感じ。

var currentScript = (function (e) {
if(e.nodeName.toLowerCase() == 'script') return e;
return arguments.callee(e.lastChild)
})(document);
document.write = function ( node, referenceNode ) {
if ( typeof(referenceNode) == 'undefined' ) {
referenceNode = currentScript;
}
referenceNode.parentNode.insertBefore( node, referenceNode.nextSibling );
}

currentScriptの取得は id:amachang さんのコードそのまま。document.write書き換えてるけど、別にそうしなくても動く。

document.writeは大体、挿入された script 要素の後ろに内容を書き出すので、それを DOM で完全に再現しようとすると、どうしても基準となる script 要素を取得する必要が出てくる。

で、今までは取得の仕方が分からなくてできないと思っていたんだけど、id:amachang さんのコードで、script 要素が取得できたので、代用品ができたというわけ。

使い道としては、Blog パーツなんかを追加する Javascript をMIME-Typeapplication/xhtml+xmlなページにおいてdocument.writeと同じような感じで要素を追加したいときに使える。ような気がする。(application/xhtml+xmlな環境で実際に動かしてはないので、きちんと動くかどうか不明)

ただ上記のコードだと、まったく問題がないとは言い切れないので、実際に利用する場合は、何らかの工夫が必要だと思う。

にしても、こんなコードを思いつく id:amachang さんはすごいです。

にゃるら(カラクリスタ)

『輝かしい青春』なんて失かった人。
次に備えて待機中。

今は趣味でプログラミングをして
生活しています。