概要: とてもシンプルに自分自身が属する script 要素を取得
の注意点。
- とてもシンプルに自分自身が属する script 要素を取得 は
docment.write
相当のことを DOM で行うのに非常に便利なんですが、 他でもないdocument.write
と非常に相性が悪いみたいです。
どういう事かと言うと、自分自身が属する script 要素の取得の前にdocument.write
使うと、
自分自身が属する script 要素の取得が動かなくなります。
以下実証コード。要素の取得の部分は id:amachang さんのコードそのままです。
document.write('hoge');
// 動かない
var current = (function (e) {
if( e.nodeName.toLowerCase() == 'script' ) return e;
return arguments.callee(e.lastChild)
})(document);
あってるかどうか分からないんですが、document.write
使うと、
どうも script 要素がnull
になるらしく(それっぽい挙動はしている)、
それ故に script 要素の取得に失敗する、と言うことみたいです。
回避方法としては、document.write
を使わないか、document.write
を DOM 化する、
という事ぐらいしか思いつきません。
ちなみにdocument.write
でしか説明してませんが、document.writeln
でも同じことが言えます。
あと、document.write
の DOM 化については、
- [[application/xhtml+xml なページで document.write を動作させる /post/50791032719]]
- [[application/xhtml+xml なページで document.write を動作させる #2 /post/50791064107]]
あたり参照してください。
にしても、document.write
と相性悪いとは。
追記:2007-01-21T09:50:00
発案者の id:amachang 氏曰く、
引用元: IT 戦ブクマ script タグが null になるのではなく、 TextNode が挿入されたため、 script タグが lastChild でなくなるのが原因です ^^;
との事。
alert
使ってテストしていたときにnull
が出てきたのは、
おそらくTextNode.lastChild
を参照しているためっぽい。
なんとなく回避方法は見えてきたので、何とかなりそう。 な気がする、……ようなしないような。どっちだ。
#FIXME