DOMNodeInserted

Date
2006-03-01 (Wed)
Category
Web | javascript

僕のよくある悪い癖なのだが、思い付いたことを実現しようといろいろ調査をしていると、目的を実現できそうな切っ掛けとなる技術を発見する。本当にそれでいけんのかいな、とさらに深い調査を始めると、最初に考えていた目的を忘れて、結局その最初に見つけた技術で出来ることを全て試すことになって、あぁ { 面白かった | つまんなかった }で、何してたんだっけ? みたいなことが多い。最悪なのはその結果を全て忘れて、同じことを繰り返したりすることなんだけど、結構やっちゃうんだよね…

と言うわけで今回もまさにそれ。忘れないように個々にメモします。

最近取り組んでいる bookmarklet を使った project 用に、script tag の読み込み完了をイヴェントハンドラに出来ないかどうか調べていました。以下結果。


script tag に onload を付ける。

ちゃんとした仕様書を見つけられた無かったけれどDOM では onload は限られたエレメントでしか fire しないようです。強いて言えばここ DOM-Level-2-Events にすこし載っています。

firefox
ファイル読み込み終了後 fire する
Opera 8.51
fire しない
Windows IE 6.0
fire しない
Safari 1.3.2
fire しない

と、見事に firefox 以外は fire しません。当たり前ですね。余談ですが、Firefox では img タグでも onload が fire します。となると、src attribute がつくタグは全て onload が fire するんじゃないかと期待できそうですが、それはそれで意味が通じます。特に“読み込み終了後 fire” というのは非常に通好みと言うか。以下、実験に使ったコード抜粋です。

<script type="text/javascript" onload="javascript:void(alert('onload'));" src="alert.js"></script>

alert.js には

alert("in script");

とだけあります。

onload sample

body に Listner Object的なものを付けてscript タグの挿入を監視

上でも黙って Quirksmode にリンクしましたけれども、javascript で event 周りをやろうと思ったら Quirksmode は素晴らしい文章の宝庫です。で、ずばり The events というページはすこからさき全ての文章への portal になっている、と言うか。以下のページ群は見ているだけでも楽しい様な browser で使用できる event ハンドラが列挙されています。(Opera 向けのページは何処にあるのだろう?)

Quirksmode の記述とやや異なりますが、Safari は DOM Level 2 Events を全て実装しているとあります。Web Specifications Supported in Opera 8 によれば Opera 8 も同様のようです。Free になったのは此のバージョンですから、まぁこれが主流になると考えて差し支えないでしょう。

と言うわけで、本題の DOMNodeInserted です。仕様書より引用すると、

Fired when a node has been added as a child of another node. This event is dispatched after the insertion has taken place. The target of this event is the node being inserted.

ですから、DOM Node を何処か別の DOM Node に挿入が完了した時に fire されるようですね。試してみましょう。以下のページにて。


DOM Node Inserted Sample

タイミングを計るのは難しいですが、上記 sample ページで読み込んでいるコードはしていることは同じですが、コメントを使ってファイルサイズを稼いでいます。やってもらえばわかりますが、DOMNodeInserted で fire される alert(MutationEvent と表示される)が出てから、alert2.js の alert (in script と表示される)が呼ばれます。(分かりにくい)

あとキモはこのコードでしょうか。

document.body.addEventListener('DOMNodeInserted', function(e){
alert(e);
}, false);

DOMNodeInserted で fire される function には デフォルトで MutationEvent という object が渡されます。その property を見れば、どんな DOM Node が挿入されたかわかる、という仕組みです。


が、Windows IE でこれを実現できる event handler を見つけられていないので…結局意味ないじゃん!みたいな。ただ listener object というアイデア自体はいけそうですね。

Comment:17

Internet Marketing Firm:2011-08-31 (Wed) 09:06

Help Full Comment

cheap nfl jerseys:2011-09-13 (Tue) 02:51


Very happy to see your article, I very much to like and agree with your point of view.

Diablo Accounts:2011-09-19 (Mon) 03:35

tourbillon watch became the new dear of trade but domestic sales this year been replica tag heuer but also for the city .

watches replica:2011-09-27 (Tue) 02:15

protection If you want to get aroles in a certain anime or fairy talecrazy Different shapes of handbags.

Ralph Lauren Outlet:2011-10-15 (Sat) 19:25

I find your post interesting ,i like it very much,thanks for share.
v

Moncler Jacket:2011-10-15 (Sat) 19:26

cperfect, I found this is very good blog, I’ll recomment it to my friends

Oakley Sunglasses Sale:2011-10-17 (Mon) 22:43

cool,this is good site,i'll recommend this to my friends

tiffany co outlet:2011-10-22 (Sat) 10:23

This article is really great, strong support

Burberry Outlet:2011-10-22 (Sat) 10:23

The article is very good, I like it very much. I will keep your new article.

Tiffany and co outlet:2011-10-22 (Sat) 10:24

It is really uesful . Thanks .

Air Max Shoes:2011-10-22 (Sat) 10:25

Add Your Comment

tiffany co outlet:2011-10-22 (Sat) 10:25

Wonderful article, I like your point of view.

wedding dress:2011-10-28 (Fri) 04:12

I like your article so that I read all of your articles in a day.Please continue and keep on writing excellent posts.

Office 2010:2011-11-16 (Wed) 20:09

No more switch Office 2007 from view to view in order Microsoft Office 2010 key to determine your availability.

Kors handbags :2011-12-07 (Wed) 21:09

cool,this is good site,i'll recommend this to my friends

Microsoft Office:2011-12-22 (Thu) 20:03

You are great! But I still did good! Hey!gferw

Microsoft Office:2011-12-23 (Fri) 02:47

Thanks a lot!

Comment Form

Remember Me?


Trackback:0

TrackBack URL for this entry
http://blogs.grf-design.com/mt/mt-tb.cgi/150
Listed below are links to weblogs that reference
DOMNodeInserted from The Croton

Return to Page Top