きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

IE7でよくなったと思ったところ & ちょっとはまった所

最近、会社のメインマシン(Not メイン開発環境)をIE7にして、現在作っているアプリのチェックしたり、過去に作ったアプリのチェックをしていて思ったことのメモ。


■よくなったと思うところ
CSSの解釈が以前より良くなった……のは、実は社内向けのIE限定アプリを作っている身としては結構どうでも良かったりするのですが(^^;*1、地味なところで、IEの仕様として有名だった*2、ドロップダウンリスト(所謂select要素)の上に何を重ねても(Z-INDEXが大きいものを絶対位置指定で配置しても)ドロップダウンリストが上に表示される(重ねて配置した部品がそこだけ上書きされる状態になる)のが解消しております。

これのおかげで、例えばカレンダ選択やらワンポイントのヒントのようなものをdiv要素などで作成し、ボタンクリックで表示/非表示に切り替えるようなこと―がやり辛かったのですが、それが解消します。


■ちょっとハマッタところ
別に改悪でもなんでもなく、実はHTMLの解釈が厳密化したために発生していることなのですが、フレームなどを利用している際に、base要素を利用して、a要素でのリンクの際に一括でオープン先のターゲットフレームを指定したりすると思います*3


このbase要素ですが、本来はhead要素の子要素である必要があるのですが、IE6まででは、body要素の中に書いても問題なく動いていました(諸悪の根源はこの動作なのですけど)。
が、IE7では、この解釈が厳密化して、head要素内に無いと無視されるようになりました。


ちなみに、私がこれに気がついたのは、showModalDialog*4で、PostBackしている箇所が軒並み新規ウィドウを開くようになった為。
showModalDialog(showModelessDialogも同様)は、a要素でのリンクだろうが、form要素のsubmitだろうが、画面遷移が発生するときは、基本的に新規ウィンドウを上げてそこで開くという仕様なので、ASP.NETなどのPostBackを楽に有効活用するために、base要素のtarget属性で_selfをしてするのが定番(と勝手に思っている)のですが、コレを軒並みbody要素の中に書いておりました。
しばらく悩んで、見つけたときは「IE7のバグか!!」とか思ったのですが、よくよくHTML辞典を引っ張り出して確認すると、「head要素の子要素」ってしっかり定義されておりました……orz


本来ならば歓迎すべき点なのですが、地味にこうなっていると、……結構辛いです……。

 
地味に辛いといえば、showModalDialogでダイアログのサイズの算出方法が変更になったのも……。
まさか、IE縛りの環境でのWebアプリで、ブラウザチェックしてクライアントスクリプトの動作を切り替える羽目になるとは……。


 

*1:暴言……かもしれませんが、実際、VS2003が未だ社内Webアプリの標準開発環境なこともあり、正しいXHTMLとか出力し辛い……とおもうし

*2:見た目、どうみてもバグっぽいとボクは思うのですが

*3:ちょっと誤解を招く表現……というか、そもそもbase要素はターゲット指定のために使うのではなく、相対パス指定する際のベースURIを定義するもの……というのは重々承知していますが、実際、ターゲット指定のために使っているケースのほうが多い…ですよね……というのは私の周りだけでしょうか……。(だって、テスト時と本番運用時でホストするサーバや仮想ディレクトリが変わったりとか、普通にあるから使いにくいのだもの……)

*4:この時点でIE縛り上等なのですが、社内のブラウザはIE限定だし、これ、使うと楽なんだもの……