ニケラオ » ウェブログアーカイブ » リンクタイプの識別
» ウェブログのアーカイブ » リンクの種類を識別する Niquelao リンクの種類を識別する 2006年9月3日、Rumorosoによる 私たちのページのアクセシビリティとユーザビリティに良い影響を与える優れた慣行は、リンク先に応じてウェブ上のリンクの種類を識別することです。そのためには、アクセシビリティに関する適切な対策に加えて、CSSを通じてスタイルの違いを作成することができます(常にリンクとして識別できる一貫性を維持するように心がけましょう)。この慣行により、グラフィカルブラウザにアクセスできるユーザーは、アクセスしようとしているドキュメントが例えばPDFであるか、またはリンク先が私たちのポータルの外にあるかを認識できます。 問題点 スタイルを適用できるように、各リンクの種類をクラスで識別する必要があります。多くの場合、リンクを挿入する人はコンテンツの責任者であり、コードをマークするアクセス権を持っていません。 解決策 javascriptで書かれたシンプルな関数を使用し、非侵入的に導入することで、「title」属性の内容(存在する場合)および/またはリンク先ファイルの拡張子に応じてドキュメントの種類を識別できます。 補足:コンテンツの編集者/責任者が、リンクの「title」属性にリンク先の種類を識別する共通プロトコルを採用することは良い慣行です。なぜなら、ほとんどの編集ツールがその入力を許可しているからです。さらに、スクリプトには、「title」属性を持たず、スクリプト自体が認識できるドキュメントを指すリンクに、「title」属性にテキストを含める機能が追加されました。 リンクの例 Google PDF形式のドキュメント このリンクには「title」属性がなく、関数によって追加されます: Wordファイル スクリプト スクリプトは以下に詳述されており、直接ダウンロードできます 最初に、コンテンツの編集者/責任者によって入力され、リンク先の種類を説明するテキストフラグメントを含む配列を宣言します: var tFormat = [“enlace externo”, “formato pdf”, “formato word”]; リンクのタイポロジーを宣言します(前のものと同じ順序で宣言): var Format = [“externo”, “pdf”, “doc”]; 各リンクの種類をフォーマットするためのクラスを宣言します(前のものと同じ順序で宣言)。これらはCSSで対応するスタイルを持ちます: var classFormat = [“externo”, “pdf”, “doc”]; function enlaces() { // ドキュメントのすべてのリンクを選択します var links = document.getElementsByTagName(“a”); for (var i = 0; i < links.length; i++) { // アンカーでないことを確認します if(links[i].href.indexOf(”.”) > -1) { // 「title」属性があるかどうかを確認します if(links[i].getAttribute(“title”)) { // 「title」属性を小文字で取得します var title = links[i].getAttribute(“title”).toLowerCase(); // 「title」に配列tFormatで示されたテキストのいずれかが // 含まれているかどうかをチェックするループを作成します。 // 見つかった場合、テキストと同じ位置に宣言された // クラスを配列classFormatに追加します for(var f = 0; f < tFormat.length; f++) if(title.indexOf(tFormat[f]) > -1) links[i].className += ” ” + classFormat[f]; } // すべてのリンクが「title」属性を持っているわけではないので // 念のため、「href」属性をチェックし、リンク先ドキュメントの // 拡張子を取得して、配列Formatで宣言されたものと // 比較します。 var ini = links[i].href.length-4; var fin = links[i].href.length; var wFormat = links[i].href.substring(ini,fin).toLowerCase(); for(var f = 0; f < Format.length; f++) if(wFormat.indexOf(Format[f]) > -1) { links[i].className += ” ” + classFormat[f]; // 「title」属性がない場合は追加します if(!links[i].getAttribute(“title”)) links[i].setAttribute(“title”, tFormat[f]) } } } } 最後にスクリプトを読み込みます: window.onload = enlaces; リンクの種類を識別する カテゴリ: CSS, Javascript —> 2件のコメント Jorge del Casar 2007年5月14日 しばらくあなたのサイトを読んでいて、とても感銘を受けました。とても興味深いものがたくさんあり、おめでとうございます。すべてを完璧にするために何度も試行錯誤されているのを見て、貢献したいと思いました。スクリプト実行時に対応するクラスで既にマークされているリンクの場合、そのクラスが重複することを考慮していませんでした。大したことではありませんが、配列Formatのクラスを最初に持っているかどうかを確認し、持っている場合は次の要素に進み、そうでない場合はスクリプトを続行することができます。このバグは、例のリンク「PDF形式のドキュメント」で発生したようです。素晴らしい仕事に改めておめでとうございます。またここで更多を見られることを楽しみにしています。 PS:メールの検証を確認してください。受け付けてもらえませんでした。ログインにピリオド(または繰り返しのアスタリスク)が含まれているためかもしれません。 Rumoroso 2007年5月14日 貢献ありがとうございます。原則として、行を修正する必要があります: if(title.indexOf(classFormat[f]) > -1) を次のように: if(title.indexOf(tFormat[f]) > -1 && links[i].className.indexOf(classFormat[f])) テストしていませんが、うまくいくと思います。メールの検証については、バリデータ自体の問題だと思います。確認します。貢献ありがとうございます。これが唯一のものではないことを願っています。 RSS 2.0フィードでコメントをフォローできます。また、あなたのサイトからトラックバックを送信することもできます。 前の記事: CSSを交換するためのスクリプト 次の記事: フォームを調整する(エピソードI) —> —> —> この作品はCreative Commonsライセンスの下にあります。
P.S. A few readers have asked which superposición de accesibilidad (overlay) we actually reach for — it's accessiBe; if you want the current details.
¿Cumplir WCAG sin tocar el código?
Superposición de IA que promete cumplimiento WCAG en 48 horas