今日、machidaさんがハマってたもの。

新しくアップしたサイトがIEでのみ一瞬表示された瞬間にIEのエラー表示に変わってしまう。

一見、リダイレクトしてるように見えたのでProxomitronでヘッダを見ようとしたら問題の動作が起きない。(ヘッダには問題無さそうだった)

どうやらProxomitronのデフォルトの設定に含まれるフィルター、Suppress all JavaScript errorsでJavaScriptのエラーを抑止すると問題が起きないようだ。(これ外すと起きる)

原因はJavaScriptだと思い、JavaScriptをオフにしてアクセスすると、いや問題が起きる。ところがActive Xをオフにすると問題が起きない。

原因は良くわからないがここから先はHTMLのどの行が影響を与えているのかを調べていくしかない。

結果どうやら一番怪しくないと思ってたCSSの中に原因があるようだった。(Active Xじゃないのか?)

img {
   behavior: url("pngbehavior.htc");
}

この部分が原因のようだ。(htcてなんだよ・・・)

調べてみると、1998年にRFCに提案されてるHTML Componentsという技術があった。HTMLとVBScriptやJavaScriptを一つのコンポーネントとして定義し、振る舞いを要素と結びつけることができるようだ。(コンポーネントはhtcという拡張子のファイルになる)

PNG Behaviorという手法があって、これはActive XのAlphaImageLoaderでIE6でもPNGのアルファチャンネルを有効にするというものらしい。スクリプトは前述のHTML Compornentsになっていてbehavior要素で紐付けされる。HTML CompornentsもbehaviorもIEでしか動かないからIE固有の問題解決にはうってつけというわけだ。

CSS → JavaScript → Active X

という構成になっている。

出るエラーはJavaScriptだが原因はActive X。読み込んでいる場所はCSSというやっかいな状態の原因はこれだ。

取り急ぎPNG Behaviorの使用を取りやめて収拾したが、やはりハックやBKの類はその怪しさを受け入れてどっぷりとつかるか、近づくのをよす方がいいと思った。

Comments


Option