2009年10月28日水曜日

スタイルシートにおける空URL指定の扱い

スタイルシートでバックグラウンドイメージの指定などに使うURL指定は、空指定した場合に参照元を引き継ぐ。(See, RFC 1808 Section 4)

空指定とは、URL()やURL('')のような指定。
参照元とは、cssファイルに記載している場合はcssファイルそれ自身で、JavaScriptでobject.style.backgroundImage等を操作している場合はJavaScriptがロードされているURLとなる。

つまり、"/hoge.css"の中で"background-image:url()"と記載すると、"background-image:url('/hoge.css')"のように解釈されるし、"/fuga.cgi"中のJavaScriptで、"document.style.backgroundImage='url()';"とすると、"document.style.backgroundImage='url(/fuga.cgi)'"のように解釈される。

このため、cssをcgi等で動的に生成している場合や、JavaScriptで動的にスタイルを変更している場合に、意図しない空指定が行われることで「無駄なhttp GET」が実行されることがある。
例えば、CGIの処理結果ページにJavaScriptが設定されており、その中で空URLが指定されるバグがあったとすると、当該CGIが2回GETされることになる。
ブラウザにもよるが「デバグ系のプラグイン」を動作させると、こういったGETが走らない場合が多く、原因究明でつまずきやすいため、URLを生成するルーチンには注意を払うべき。

0 件のコメント: