今日、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の類はその怪しさを受け入れてどっぷりとつかるか、近づくのをよす方がいいと思った。