Jintrick.netagenda2004年03月アーカイブ → 2004年03月19日

とことん標準に拘ったCSS切り替えスクリプト(その2)

とことん標準に拘ったCSS切り替えスクリプト(その1) (agenda)の続き。典拠の見直し等。

DOM Level 2 HTML の意義

前回、DOM Level 2 HTMLを考慮に入れないと書きましたが、するとdocument.cookieが使用できなくなりますのでこれを撤回します。

こうなると、document.writeメソッドを忌避する理由が無くなり、DOM Level 2 StyleSheets等に拘る理由も消えます。

本来、CSSの切り替えはブラウザが行ってくれれば良いわけですが、そのようなブラウザでも幾つか不満が残ります:

前者はdocument.cookieの書き換え及び参照で解決できますが、問題は後者です。実はDOM Level 2 (StyleSheets|CSS)的には、この問題を解決する方法はありません。CSSスタイルシートは、CSSStyleSheetインターフェイスを持ったオブジェクトとして扱われます(例えば実装ブラウザではdocument.styleSheets.item(0) でこのインターフェイスを持ったオブジェクトにアクセスできます)。しかしながら、このCSSStyleSheetインターフェイスを持ったオブジェクトを作成する手段、DOMImplementationCSS.createCSSStyleSheetメソッドを実装しているブラウザがありません(今のところ)。あったとしてもStyleSheetsコレクションに追加する手段がありませんから無意味です(参照:作成と追加をいっぺんにやってくれる、MSIEのdocument.createStyleSheet

link要素を生成して挿入するといった方法は非論理的な物理的なものであって、それを行ったとしてもCSSが切り替わる保障はありません。HTMLBodyElement.setAttribute('style', 'color: red');を実行するのと似ています。style属性を追加したからといって、ダイナミックにスタイルが変更される保障はありません。

従って、HTML文書からリンクされていない新たなCSSを追加する確実な方法は、「document.writeメソッドでlink要素を書き出す」しかありません。

2004年3月28日まで - 徒書より誤りのご指摘を受け、削除。

設計思想的にあり得ないと思い込んでおりました。


webmaster@jintrick.net
公開: 2004年03月19日
カテゴリ: CSS ,DOM ,Javascript