インターネットエクスプローラ 7.0までに対して。<q>要素に引用符を与える処理を考えてみましょう。
HTMLの仕様ではインライン引用フレーズである<q>要素については、文書作成者ではなくウェブブラウザが引用符を要素内容の前後に表示する事となっております。
しかし、インターネットエクスプローラ 7.0までではそのような実装にはなっておりません。
そこで、DOMを活用して引用符を自動挿入するようにしましょう。
この機能はインターネットエクスプローラのみ対象にすれば良いでしょう。
インターネットエクスプローラは、アクティヴスクリプトを無効に出来るようになっております。
従って、セキュリティ上の理由からスクリプトを無効にしている場合であっても、CSSに依り適切なスタイルを与えておく必要があります。
また、スクリプト側では、スクリプトを無効にしている場合のためのスタイルを帳消しにする事も忘れないようにしましょう。
ここでは、ファイヤーフォックス, サファリ, オペラ或いはインターネットエクスプローラ 8.0以降ではかぎ括弧を引用符として与えるようにし、インターネットエクスプローラ 7.0まででは斜体で表示するようにしているものと仮定します。
すなわち、以下のようなスタイルが与えられているものと仮定します。
q:before {font-family: "MS Pゴシック", sans-serif;content: '\300C';/* content: '「'; だと一部で文字化けが起こる。 */}q:after {font-family: "MS Pゴシック", sans-serif;content: '\300D';/* content: '」'; だと一部で文字化けが起こる。 */}* html q { font-style: italic; }// IE 6.0まで。*+html q { font-style: italic; }// IE 7.0。
インターネットエクスプローラ 7.0まででは、<q>要素に対する:before/:after擬似要素セレクタは認識出来ずエラーとして弾きますが、その後の
html q セレクタと同一視され、結果<q>要素は斜体表示となり、html q セレクタと同一視され、やはり<q>要素は斜体表示となります。スクリプトは、HTML文書とは別のファイルで保存し、<q>要素を用いたHTML文書では当該スクリプトを<head>要素内に<script>要素で埋め込むように記述します。
スクリプトはHTML文書の読込が完了すると自動的に処理スクリプトを起動して、インターネットエクスプローラ 7.0でも<q>要素に引用符が書かれるようになります。
以下のようなスクリプトを書いて、それをHTML文書からリンクすれば、アクティヴスクリプトを有効にしたインターネットエクスプローラでは、全ての<q>要素の内容にかぎ括弧が与えられて表示される事になります。
onload4setStyle=window.onload;window.onload=setStyle;function setStyle() {if (onload4setStyle) onload4setStyle();// 対応出来ない環境を弾く。if (!document.getElementById ||navigator.userAgent.indexOf('Opera/6')>-1 ||navigator.userAgent.indexOf('Opera 6')>-1) {return;}// **** 全ブラウザ対象の処理 **** // **** IE 7.0までのみ対象の処理 ****if (!document.all || window.opera ||navigator.userAgent.indexOf('Trident/')>-1 &&navigator.userAgent.indexOf('MSIE 7.')<0) return;// <q>要素内容の前後に引用符を与える。var eles=document.getElementsByTagName('q');var i=-1;var j='<font face="MS Pゴシック">「</font>';var k='<font face="MS Pゴシック">」</font>';while (++i<eles.length) {eles[i].innerHTML=j+eles[i].innerHTML+k;// 以下、スクリプトが使えないIE向けのスタイルを帳消しにする処理。eles[i].style.fontStyle='normal';//スクリプト無効なら斜体だった。}// <q>要素内容の前後に引用符を与える処理はここまで。}}
文書内にある全ての<q>要素ノードを対象に、その内容の前後に引用符を与えると言うものです。
また、引用符を与えたあと、スクリプトが無効になっている場合のスタイルを帳消しにしております。
尚、<q>要素の内容を引用符で囲むのはHTMLの記述としては不正ですが、あくまでもブラウザの内部処理として行わせるため特に問題は起こらないでしょう。
Copyright ©平成21年-平成24年 さいたま・しらぎくさいと 版権所有
marguerite.site@gmail.com