とことん標準に拘ったCSS切り替えスクリプト(その1) (agenda)の続き。典拠の見直し等。
前回、DOM Level 2 HTMLを考慮に入れないと書きましたが、するとdocument.cookie
が使用できなくなりますのでこれを撤回します。
こうなると、document.write
メソッドを忌避する理由が無くなり、DOM Level 2 StyleSheets等に拘る理由も消えます。
本来、CSSの切り替えはブラウザが行ってくれれば良いわけですが、そのようなブラウザでも幾つか不満が残ります:
前者は link要素を生成して挿入するといった方法は非論理的な物理的なものであって、それを行ったとしてもCSSが切り替わる保障はありません。 従って、HTML文書からリンクされていない新たなCSSを追加する確実な方法は、「 2004年3月28日まで - 徒書より誤りのご指摘を受け、削除。 設計思想的にあり得ないと思い込んでおりました。document.cookie
の書き換え及び参照で解決できますが、問題は後者です。実はDOM Level 2 (StyleSheets|CSS)的には、この問題を解決する方法はありません。CSSスタイルシートは、CSSStyleSheet
インターフェイスを持ったオブジェクトとして扱われます(例えば実装ブラウザではdocument.styleSheets.item(0)
でこのインターフェイスを持ったオブジェクトにアクセスできます)。しかしながら、このCSSStyleSheet
インターフェイスを持ったオブジェクトを作成する手段、DOMImplementationCSS.createCSSStyleSheet
メソッドを実装しているブラウザがありません(今のところ)。あったとしてもStyleSheets
コレクションに追加する手段がありませんから無意味です(参照:作成と追加をいっぺんにやってくれる、MSIEのdocument.createStyleSheet
)
HTMLBodyElement.setAttribute('style', 'color: red');
を実行するのと似ています。style属性を追加したからといって、ダイナミックにスタイルが変更される保障はありません。
document.write
メソッドでlink要素を書き出す」しかありません。