カスタムパネルなどから使用する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メソッドの第二引数は本来文字列ですから、これは不正です。多分。