Jintrick.netagenda2002年11月アーカイブ → 2002年11月30日

fub_net 日記(2)

カスタムパネルなどから使用するbookmarkletsでは、表示している文書のdocumentオブジェクトを参照することはできませんでしたが、fub_net(ver. 0.0.1.18)でそれが可能になりました。

HTML版のDOM Inspectorを作ってみました。実際にDOMツリーを視覚化してみると、IE6/WinのDOM1 HTMLの実装の癖や穴が色々見えてきます。TITLE ElementのchildNodes.lengthが0で固定だったり、script要素の終了タグだけが記述されていると、「/SCRIPT」なるElementが存在したり、Elementにユーザー定義のプロパティを追加すると、それがNamedNodeMapにも追加されてAttrとして扱われ、かつspecifiedがtrueになっていたりします:

var elmP = document.getElementsByTagName('P').item(0);
elmP.suicide = function(){
 this.parentNode.removeChild(this);
};

このように、あるP Elementにsuicideというメソッドを定義してやります。すると:

var nnmP = elmP.attributes;
var attrSC = nnmP.getNamedItem('suicide');
alert( attrSC.specified );

結果はtrueです(IE6/Winで確認)。

プロパティを追加してやるということと、setAttribute()してやることは、IE6/Winにとって同じ事のような気がしてなりません。逆にこんなことをしてみました:

var elmP = document.getElementsByTagName('P').item(0);
var f = new Function( "this.parentNode.removeChild(this)" );
elmP.setAttribute('suicide', f);
elmP.suicide();

結果、最初のp要素が消去されます(IE6/Winで確認)。setAttributeメソッドの第二引数は本来文字列ですから、これは不正です。多分。


webmaster@jintrick.net
公開: 2002年11月30日
カテゴリ: DOM ,Javascript ,ブラウジング