代替スタイルシートに萌え〜
モヂラでしか見られないスタイルシート。 スクリプトでIE対応させてるサイトが密かに急増中。 先ずはここから http://www.cc-net.or.jp/ ~piro/ 佐世保市で高校1年の女子生徒が同級生を殺害した事件から昨日で丸8年です。 当時、対応で問題を指摘された児童相談所では朝礼で訓示がありました。 8年前の7月26日、女子高校生が同級生を殺害するという衝撃的な事件が起きました。 加害少女は当時15歳、殺人容疑で逮捕後医療少年院に送られ、成人になった今も収容されています。 加害少女は現在23歳ですが、去年、裁判所から「矯正教育を継続して行う必要がある」と判断され2024年までの収容延長が認められています。 加害少女の近況について元付添人弁護団は「矯正教育により対人交流などに成長がみられ内省が深まるなどの変化が生じている。贖罪の気持ちを深めていくため更なる内省の獲得に努めている」としています。 山瀧 猛 所長「この事件のことを児童相談所の中で風化させない」 佐世保市の児童相談所では、26日、朝礼が行われ、再発防止に向け、訓示がありました。 事件の直前、児相では少女を診察した医師から「人を殺しかねない」との連絡を受けたものの、具体的な対応を取らなかったことが指摘されました。 山瀧 所長「人身の安全に関わるような相談については、危機意識をきちんと持って対応する」 児童相談所では些細な情報でも会議に諮り、組織として対応するなど事件を教訓にした対策を今後も徹底していくとしています。 今ぢゃ代替スタイルシート対応ブラウザーはFirefoxだけ。 GoogleChromeに追随してOperaもMicrosoftEdgeもSafariもスタイルシート切換機能をサポートしない。 Chromeは拡張機能のWebpage DecoratorやStylus等を入れれば良いみたいだが……。 しかしJavascript噛ませばFirefox以外でもできはするんだから、もちっと工夫できないかね。 >>549 以下二行に問題がある。 SL.disabled = (SL.title==name ) ? false:true; SL.disabled = !SL.disabled; SL.disabled = !SL.disabled; これだと、優先スタイルシートありの場合に、ChromeやEdgeやOperaで切替動作に異常が出る。 ↓ いっぺんスタイル無効にしてから有効にし直す仕組みにする。 SL.disabled = true; SL.disabled = (SL.title==name ) ? false:true; 問題を起こす !SL.disabled の二重化(Chrome対策用#)は削除する。 # https://www.usamimi.info/ ~geko/arch_web/02_sample/018/index.html これで、Firefox以外のブラウザでも、うまく優先/代替をスイッチできる。 参考「ChromeやEdgeで代替スタイルシートを切換可能にするには?」 https://teratail.com/questions/rbh54l6goho0n1 >>489 代りに.createElementと.innerHTMLと.insertBeforeで、関数作って何とかする。 [JavaScript]document.writeの代替え http://gon-fla.sblo.jp/article/183580209.html >>401 >>433 > if (sfTitles.indexOf(sS[i].title)==-1) >>549 > if (sfTitles.indexOf(SL.title)==-1) これらは、以下のHTMLの場合に不具合が生じた。 <link rel="stylesheet" type="text/css" href="persistent.css"><!--固定スタイルシート --> <link rel="alternate stylesheet" type="text/css" href="01.css" title="非優先"> <link rel="stylesheet" type="text/css" href="preferred.css" title="優先"> <link rel="alternate stylesheet" type="text/css" href="02.css" title="代替2"> 即ち、優先シートを指定するlink要素の前に代替シートを指定するlink要素が先行し、 且つ、優先シートのtitle属性値が先行指定された代替シートのtitle属性値に含まれる場合には、 優先シートのタイトルが選択肢(selectのoption要素やラジオ・ボタン)に出てこなくなる罠。 対処法としては、次の通り、各title属性値がsheetTitlesに含まれない場合を.indexOfでなく.testを以て条件指定とすれば良いみたい。 if ( sS[i].title && !(/sS[i].title/.test(sheetTitles)) ) 乃至は if ( SL.title && /SL.title/.test(sheetTitles)==-1 ) 上記にて、 sS[i].title && 乃至 SL.title && を条件に併記するのは、title属性の無い固定スタイルシートまで選択肢に出現するのを避けるため。 >>586 訂正 > if ( sS[i].title && !(/sS[i].title/.test(sheetTitles)) ) > 乃至は > if ( SL.title && /SL.title/.test(sheetTitles)==-1 ) if ( sS[i].title && !(/sS[i].title/.test(sfTitles)) ) 乃至は if ( SL.title && /SL.title/.test(sfTitles)==-1 ) >>586 優先・代替いづれであれ関係無い。 或るlink要素のスタイル名が、先行するlink要素のtitle属性値に含まれる文字列である場合、後続のそのスタイル名は選択肢に出なくなる。 例) 下記ではスタイル名「代替」(=alt01.css)がoption要素に現れない。 <link rel="alternate stylesheet" type="text/css" href="alt02.css" title="代替2"> <link rel="alternate stylesheet" type="text/css" href="alt01.css" title="代替"> 上記の選択肢が出てこない問題を、.indexOf の代りに .test を使ったif条件文にして解消しても、 複数シートを同一スタイル名で括るtitle指定の場合に、却って選択肢が出すぎる不具合が起きた。 <link rel="alternate stylesheet" type="text/css" href="alt02-1.css" title="代替2"> <link rel="alternate stylesheet" type="text/css" href="alt01.css" title="代替"> <link rel="alternate stylesheet" type="text/css" href="alt02-2.css" title="代替2"> 右の例では、同名シート「代替2」が選択肢に二回重出する破目に。 解決法としては、北村曉『曉に死す』中「徒委記」の「CSS切替スクリプト」を参考にする。 http://www.akatsukinishisu.net/wiki.cgi?CSS%C0%DA%C2%D8%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8 特に、/* 既に同じスタイル名がある場合は除く */とコメントのある箇所。 修正すると、こんな風に。 for (i=0; i<sS.length; i++) { var isSameTitle = false; for (var j = 0; j < i; j++) { if (sS[j].title == sS[i].title) { isSameTitle = true; break; } } if (!isSameTitle) { sfTitles+=sS[i].title; // >549はsfTitles+=SL.title; sfTitles+=","; } } 代替スタイルシート切替スクリプトって、やけにページ読み込み完了まで時間が掛かるのが多くない? tp://sug.blog2.fc2.com/blog-entry-487.html の サンプル( tp://sug.blog2.fc2.com/?style2=cfdn_10&index )とか、 tp://critical.s6.xrea.com/web/cssselect.html とか、 tp://confetto.s31.xrea.com/misc/switchstyles とか。 ソース見るとhead内link要素で代替シートを指定してあるのに、読み込み初回では Firefoxのメニューバー→表示→スタイルシートになかなか代替スタイル名が出てこなかったり。 読み込みを重くする原因は何なのか? Cookieの所為? >>589 いちゆうの tp://critical.s6.xrea.com/web/cssselect.shtml の問題なら、 メイン関数のwindow.onload=fInit;がページ読み込み終了後でないと処理実行されなくしてるからでは。 Cf.「スタイル切り替えスクリプトがうまく動作してないです」 tp://www.remus.dti.ne.jp/~a-satomi/nikki/2003/05c.html#d29n01 「スタイル切り替えスクリプトがうまく動作してないですリターンズ」 tp://www.remus.dti.ne.jp/~a-satomi/nikki/2003/10b.html#d15 document.addEventListenerでloadイベントに代ってDOMContentLoadedイベントに変更すれば読み込み速くなるのかな? ↓時間が止まったみたいに、なつかしい。 Hiro Konda's Web Stylesheet Selector for IE 5+ and Gecko Ver 0.8.0 www.minc.ne.jp/~konda/web_resoce/js/css-select/index.html read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる