MozillaでCSS切り替えがうまく行かない件の修正を開始。どうやらクッキーの問題ではないようなので根幹から疑ってみる。
if(!document.styleSheets) return; var sheets = document.styleSheets; for(var i=0; i<sheets.length; i++) document.write('<samp>'+sheets[i].title+':'+sheets[i].disabled+'<\/samp><br \/>');
以下、実行結果。(soleilは通常スタイルシート、luneは代替スタイルシート)
Mozilla(とNetscape6)での実行結果。 soleil:false
代替スタイルシートが認識されてないのか。と、思ったら下の命令ではlune:true。どっちなんだ?。
alert(document.styleSheets[1].title +':'+ document.styleSheets[1].disabled)
掲示板に件の話題があり、表から入れないページを発見。詳細があった。さすがは。
Netscape6は、読み込み完了前にdocument.styleSheetsを取得してしまうと、代替スタイルシートが正しく含まれていない不完全なコレクションを参照し続ける場合がある。
引用元 JavaScript for CSS (9-2) より
私のスキルでは致命的な欠陥。新たにmeta要素を書き出す対策があるらしいが……。
閲覧に問題ない不具合は無視。特定ブラウザのためのコードは書かないし、ブラウザ判別も一切やらない。オブジェクトやメソッドが定義されているかどうかで判別する方針。今後これは徹底することにした。これからスリム化しようというときにこれ以上jsファイルが膨らんでたまるか。
よってこの件は終了。かなり切なくはあるものの。