の注意点。
とてもシンプルに自分自身が属する 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化については、
あたり参照してください。
にしても、document.writeと相性悪いとは。
追記:2007-01-21T09:50:00
発案者のid:amachang氏曰く、
引用元:IT戦ブクマ script タグが null になるのではなく、 TextNode が挿入されたため、 script タグが lastChild でなくなるのが原因です ^^;
との事。
alert使ってテストしていたときにnullが出てきたのは、
おそらくTextNode.lastChildを参照しているためっぽい。
なんとなく回避方法は見えてきたので、何とかなりそう。 な気がする、……ようなしないような。どっちだ。