テーマ一覧に関する既知の問題
テーマ一覧を方々からご紹介いただいて恐縮なんですが,まだちょっとバグがあります.
まず,Operaじゃ全然動きません.現在,スタイルシートを切り替えるスクリプトは:
function theme(name){ var ss = parent.view.document.styleSheets; for(var i=0; i<ss.length; i++) ss.item(i).disabled=true; var nl = parent.view.document.createElement('LINK'); nl.rel = "Stylesheet"; nl.type="text/css"; nl.href = "http://d.hatena.ne.jp/theme/"+name+".css"; var oh=parent.view.document.getElementsByTagName('HEAD').item(0); oh.appendChild(nl); top.window.status = "現在選択されているテーマは『"+name.split("/")[0]+"』です."; }
このようになっています.styleSheetsオブジェクトで適応されているスタイルシートをかき集めそれらを一つずつ無効にし,新たに,link要素を追加していきます.OperaはstyleSheetsオブジェクトをサポートしていないのでこのままじゃどうにもなりません.また,link要素をガンガン追加していくので,ブラウザによってはそれ以上link要素を追加できなくなって切り替えができなくなる場合もあるようです(再読込すればOK).
なので,追加した要素は削除しちゃえということで,以下のスクリプトを考えました.
function theme(name){ var d = parent.view.document; var h = d.getElementsByTagName('HEAD').item(0); var l = d.getElementsByTagName('LINK').item(0); h.removeChild(l); var nl = d.createElement('LINK'); nl.rel = "Stylesheet"; nl.type="text/css"; nl.href = "http://d.hatena.ne.jp/theme/"+name+".css"; h.appendChild(nl); top.window.status = "現在選択されているテーマは『"+name.split("/")[0]+"』です."; }
これで,要素を削除してから追加するようになるのですが,またしてもOpera6じゃ要素を削除できず,Opera7では要素自体は削除できてもスタイルシートが多重に適応されてしまいます.
もうわかりません.みなさんお知恵をお貸しください.OperaはBork版なんか作ってないでもっとましにJavaScriptを実装してください(マジで).
また,Macでは動作確認をしていないので,特にIEで正常に動くか報告していただければ幸いです.
後者のスクリプトにしました.