fetus Diary
2006/09/27(水) - IE のばっきゃろー
[Object DOMElement].setAttribute('onclick', 'foo()'); が動かないと思ったら、IE の手抜き実装により foo() は function object として認識されず、実行されないらしい。
仕方ないので、[Object DOMElement].setAttribute('onclick', function() { foo(); }); と anonymous function object を渡してやるようにする。すると、今度は firefox とかで動かなくなる(この実装が正しいかは知らないけど、DOM の概念から言って firefox は間違いでは無い気はする(Document Object を操るものだから。内部コードに変換されたものを操るんじゃないよね、たぶん))。仕方ないので、if(document.all && navigator.userAgent.indexOf('; MSIE ') >= 0) { } なんてことになったりする。しかも、これだとその時点での変数を引数として渡したりできないので、new Function('foo("' + hoge + '");'); とかになったりしてもうわけわからん。
余談。
IE のパーサって、onload が飛んでくる状態だと href の中を絶対 URL に書き換えてるのね。外部リンクかどうか判別するのに、http:// で始まっているか判定してたら全部外部リンクになってびっくりしただーよ。
ということで、某社のサイトにはこういうコードが追加されました。HTML 的には新しいウィンドウなんて作るようには見えないのに、実際にクリックすると新しいウィンドウが開くという謎の挙動をします。個人的には、外部ウィンドウで開くとかの制御は全部自分でしたいのでこういうの不要なんですが(っていうか邪魔)、世の中そうも行かないらしくてねぇ…。しかし、サイトは XHTML 1.1 で記述してあるから target="_blank" なんて指定はできないのだ。普通のブラウザなら動くけど。さらに、XHTML 1.1 を拡張して独自の DTD にしてそういう属性を加えてやれば OK だけど。
まぁ、簡単に言うと、IE は、HTML を最初に parse する時点で自分に都合の良いように変換しておいて、その後、外部要因によって変更された場合(ただし、innerHTML/outerHTML を除く)、積極的な再解釈は行わない、かな。
しかし、a 要素の href 属性の中身(たぶん img 要素の src 属性とかも同じだと思う)を元の HTML 文章と全然違う形にして DOM 要素として返すのは良いのかしら? そういうのを期待する人はなかなか居ないと思うんだけど…。
06/09/27 17:0406/09/28 3:55
コメント
コメントはありません。