仕様には忠実に?

投稿日:
2009年03月31日
カテゴリー:
メディア

現在、サーバ上のファイルを管理でいる仕組みを作っているのだけれど、ユーザ・インターフェースを考慮して、クライアントのウェブブラウザ側で走るスクリプトを作っている。が、これまでINternet Explorerでは動かなかった、というかパース(XHTMLファイルに読み込むように指定したJavaScriptファイルが、読み込みの後、ウェブブラウザのレンダリングエンジンに理解される過程)の途中で読み込みが終了し、実行されなかった。1ヶ月ほど悩んで、というか放置してOperaとFirefoxで開発を進めていた。で、開発がひとだんらくしたので、いよいよ本腰を入れて原因を調べようと思ってあれこれやっていたら、ついに原因がわかったっ!

HTMLにはいくつかの仕様がW3Cという業界団体によって策定されているのだけれど、その仕様を調べてみた。今回はXHTML1.1という仕様でウェブページを作っているのだけれど、なんと、SCRIPT要素は内容物を持たなければならなかったのです。

xhtml 1.1のXHTML Document Scripting Moduleによると

<!ENTITY % script.content ″( #PCDATA )″ >

となっているので、SCRIPT要素は必ず内容を持つのでした。あぁ、空要素でもOKだと思っていたので、「<script />」で書いてたよ。。。

そもそも今まで、クライアントサイドのスクリプトはクライアントの環境によって動作が安定しないだろと思っていたので、スクリプト関係は不勉強なのでした。やっぱり隅から隅まで知っていないとだめですね。

というわけで、「<script<>/script>」に書き換えたところ、動いた!!感激っ!!

でも動かないところがあるんですが、それは既知の問題というわけで、多分DOMのEVENTオブジェクトあたりだと思っていたら、やっぱりそう。ここは世にいるすべてのウェブ・プログラミング技術者が悩んでいたところ。今回はJavaScriptライブラリ「prototype.js」でこのブラウザ互換性のところを解決しようと思っていたので、bind関数をbindAsEventListner関数(EVENTオブジェクトをどのブラウザでも利用できるような形で発生させる)に書き換えたところ、動きました。1ヵ月の作業が身を結んだ瞬間なので、感激もひとしおでした。

ところがどっこい。今度はXHTML文書(親)のOBJECT内に読み込んだ別なXHTML文書(子)から、親文書のJavaScriptオブジェクトにアクセスできない問題が発生。FirefoxやOperaでは「window.parent」でアクセスできるんだけど、Internet Explorer 7 では駄目でした。「window.parent」に含まれるオブジェクトやそれが含むオブジェクトを検索しても見つからず。あぁ、これじゃアップロード機能が実現できないじゃないか。

というわけでOKWaveのコミュニティに相談しているところです。いい方法が見つかるといいなぁ。

コメント

コメントはありません