概要: Javascript のdocument.write
を DOM 仕様にする。
追記:2006-12-16T18:11:00+09:00
document.write
やdocument.writeln
を DOM 仕様にし、
document.write
やdocument.writeln
を使ったコードをMIME-Type
がapplication/xhtml+xml
なページでほぼそのまま動かせるスクリプトを書きました。
詳しくは [[application/xhtml+xml なページで document.write を動作させる]] を閲覧してください。
追記終了
- IT 戦記 の id:amachang さんのエントリ、 とてもシンプルに自分自身が属する script 要素を取得 をみて、
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-Type
がapplication/xhtml+xml
なページにおいてdocument.write
と同じような感じで要素を追加したいときに使える。ような気がする。(application/xhtml+xml
な環境で実際に動かしてはないので、きちんと動くかどうか不明)
ただ上記のコードだと、まったく問題がないとは言い切れないので、実際に利用する場合は、何らかの工夫が必要だと思う。
にしても、こんなコードを思いつく id:amachang さんはすごいです。