2001-05-18

スタイルシート切り換えスクリプト

2001-06-02

開発日記はここで続けると思うけど、最新版のテストは今日以降iDiskに移行

2001-06-01

S5

一応名称は決定。考えてみれば「切り換え」ではなく「選択」の方が何となくいいかも。

スタイルシート名のリストから階層化された配列を出力し、そこからoptgroupのメニューを書出す事が出来る様になった。ただ、抽象化は完了したものの書き出しの部分で階層化はまだ。ニ階層以上のグループが在るとバグる。

残念な事に、metaでデフォルトスタイルを変えると見た目は変わるのだがUse Stylesheetメニューは変わらないと言う不思議な仕様になっている事が分かった。そしてスクリプトからの呼び出しでも同じ。今調べたから分かったのだが、link要素におけるスタイルシートのdisabledDOM1で既に定義されている。

2001-05-30

ビギナーのためのネットスケープ6講座その他の情報によると、Geckoで<meta http-equiv="Default-Style" content="云々">としてやれば、デフォルトのスタイルシートを切り換える事ができるらしい。これがスクリプトから書出されたタグでも認識するかどうか試した所、うまくいった。Cookieとクエリの処理は問題無いので、残る問題はフォームの書き出しだけだ。

2001-05-29

StyleSheetとElementを同一視するべきなのかそうでは無いのかがさっぱり分からず。取り敢えず、HTMLの仕様的には代換スタイルシートの指定時にはstyle要素は使うなと言う事なので、対処は見送り。

2001-05-28

今まであんまり気にせずにことえりのなすがままにして来たけど、「きりかえ」って、「切り替え」「切り換え」「切替え」「切換え」「切替」「切換」のうち、どれが適当なんだろう?

HTML4仕様書には、固定スタイルシート、優先スタイルシート、代換スタイルシートの概念はlink要素での指定でしか表現出来ないかの様な書き方なんだが、DOM2Style仕様書にはstyle要素もDocumentStyle.styleSheetsに含まれるかの様な書き方がしてある。今の所IE5:macで確認した所ではDocumentStyle.styleSheetsstyle要素が含まれる事は無いみたいなので(これは多分に読み込み順に関係しているのでは無いかと僕は睨んでいるが)放っといているが、本当の所はownerNodeからちゃんと要素名を取得して処理するべきだろう。

追記

script要素より前にstyle要素を置いて試した所見事にlink要素と同じ挙動をしてくれた。やっぱりHTMLの読み込みとスクリプトの処理順で得られるDocumentStyle.styleSheetsが違ってくる様だ。

対応状況

確認したのはGecko、IE、Operaなのだが、IE以外は今の所全滅。Geckoは標準準拠を謳ってはいるけど、これだけに関して言えば本家本元のIEに劣る。Geckoがこの調子だから、他もあんまり期待出来そうにない。

2001-05-24

window.onload=main;だとデフォルトの妙な影響が残り、window.onload=main();だとマトモになる事が分かった。JavaScriptの記法的にはどちらが正しいのだろう?

前述の方法は意味が無い。

To Do

外部スタイルシートに関する仕様書の記述から得られる条件は、

こう言う細かなルールはDTDでは絶対に表現不可能なので、是非ともXML Schemaによる詳細なルール決定を望む。

form

application/x-www-form-urlencodedでエンコーディングされたフォームデータの+が、もともとは半角スペースだったのか、或いはもとから+記号だったのかを区別する手段は無い。

対処法は二つ。formの値に+記号は使わない。もう一つは、半角スペースを使わない。

追記

代換スタイルシートと優先スタイルシートをオフにし、固定スタイルシートのみを適用している状態は必要か?

Geckoの実装に倣えばNo。

2001-05-22

IE4:winでの動作を確認。あとは、永続スタイルシート(title無しのlink?xml-stylesheet、それにstyle要素)に関するエスケープだ。

2001-05-21

document.styleSheesを参照せずに、DOM1 Coreからdocument.getElementsByTagName("link")で直接link要素を参照してdisabledを得てみたらalternate stylesheetのもfalseになっていた。もしlink rel="alternate stylesheet"StyleSheetとして認識しているのであればこれはどのスタイルシートも適用されていると言う意味になってしまう。結局、DOM2 Styleからのスタイルシート切り換えはMozillaでは無理と言う事か。

……となると、一体MozillaはUse Stylesheetメニューをどの様に実装しているのかと言う疑問が出てくる。一応代換スタイルシート選択の手順を用意しているもののJavaScript等からはアクセス不可能な為にクライアントサイドではCookieとの連係が取り様のないMozillaと、多少buggyなものの実装しておりJavaScriptからもアクセス可能なのに何故か表に出していないIEとどちらがマシなんだろう?

追記

document.styleSheet.lengthをキーにfor文を書くとUse Sylesheetメニューが潰れる事が分かった。

2001-05-19

form提出の時兎に角半角スペースは+になると分かったので取り敢えずtitleに半角スペースを使っても問題の無い様にした。あとはグループ分けとMozilla対策……グループ分けは何とかなりそうなんだが、MozillaのJavaScript実装次第だから如何ともし難い。

追記

試しにオンロードから切り換えを呼び出してみた所、ロード中は一旦デフォルトが適用されロードが完了した時点で指定したスタイルシートに切り替わるのだが、どうもそれだとデフォルトの影響が残るようだ。もしや、これが原因でMozillaは実装を見送ったのか?

2001-05-18

色々調べてみて、どうやらIE4:windocument.styleSheetsからスタイルシートを選ぶインターフェイスを備えているらしいと分かった。とすればウチのIE5:macでもいけるのでは?と試した所うまくいく。

ここでハタと考えてしまったのだが、JavaScriptからこれを実行して完璧に動作したと言う事はIEはWin、Mac問わず既に内部的に代換スタイルシートの機能を完璧に実装している事になる。何で表に出してくれない(泣)。

喜び勇んでMozillaで試したのだが……うまくいかない。何故かalertを無視してくれるので途中経過報告をdocument.writeに頼らなければならないのは置いとくにしても、代換スタイルシートがUse Stylesheetメニューから全て消え失せて残るのはNoneとデフォルトのみ、しかも選択されるのはNoneと言うとんでもないバグだか仕様だかは一体何時からのモノなんだ?それとも、document.styleSheetsではなくもっとちゃんとしたアクセスインターフェイスがDOM2HTMLで定義されていると言う事か?(恥ずかしながら未確認)。

兎に角、わかっている限りの現状ではN4はCSS的にも無視しているので置いておくとしても、IEのみスクリプトを適用してN6/Mozillaを弾かなければならないと言う悲しい結論に至る。

追記

document.styleSheetsは標準には無いらしい。で、document.styleSheets[].addRuleには代換手段があるらしいのだが、document.styleSheetsそのものはざっと調べただけでは出て来ない。欲しいのはStyleSheetListなんだが、一体何処から取得すればいいんだ?

追記

DOM2StyleでもDocumentStyleインターフェイスを実装したDocumentであればいいので、結局document.styleSheetsStyleSheetListを得ればいい事が分かった。だと言うのにちゃんと動かないので試しにdocument.styleSheets.lengthを表示させてみたら1と出た。……考えられる可能性は二つ。Mozillaはこう言う類いの実装をしていない。か、別の所からStyleSheetListを取得しなければならない。