2004-03-18
ã¢ã¯ã»ã¹ãã¼ã®ç¤ºãæ¹ã«ã¤ãã¦èãã
ã¢ã¯ã»ã¹ãã¼ã¨ã¯ï¼
HTMLãXHTMLã§ã¯ãaccesskey屿§ãæå®ãããã¨ã§ã¢ã¯ã»ã¹ãã¼ãå²ãå½ã¦ããã¨ãã§ãã¾ããå²ãå½ã¦ãããã¢ã¯ã»ã¹ãã¼ã®å¼ã³åºãæ¹æ³ã¯ã·ã¹ãã ã«ä¾åãã¾ãããä¾ãã°ãWindowsç¨ã®MSIEãªãaltãã¼ã¨accesskey屿§å¤ãæ¼ããã¨ã§ã¢ã¯ã»ã¹ãã¼ãå©ç¨ãããã¨ãã§ãã¾ãã
ããããã¢ã¯ã»ã¹ãã¼ã®ã¬ã³ããªã³ã°æ¹æ³ã¯UAã«ä¾åããä¾ãã°ãMacintoshç¨ã®iCabãªãaccesskey屿§ãæã¤ããè¦ç´ ã®å
é ã«å²ãå½ã¦æåãå°ãã表示ãããã¨ãã§ãã¾ãããç¾ç¶ã§ã¯ãå¤ãã®UAã¯ã¢ã¯ã»ã¹ãã¼ãã¬ã³ããªã³ã°ãããã¨ãã§ãã¾ããã
ã¢ã¯ã»ã¹ãã¼ãæ¬æã«ç´æ¥è¨è¿°ããã
ã¢ã¯ã»ã¹ãã¼ã®å²ãå½ã¦ãããè¦ç´ ã®åãå¾ã«ã¢ã¯ã»ã¹ãã¼ã示ãããè¯ãããã§ãããæ¬¡ã®ãããªå ´åã ã¨ä¸èªç¶ã«æãã¾ãã
次ã®ä¾ã§ã¯ãaè¦ç´ ã«ã¢ã¯ã»ã¹ãã¼ãå²ãå½ã¦ã¦ãããå½è©²è¦ç´ ã®åã®æåã¯ãå²ãå½ã¦ãããã¢ã¯ã»ã¹ãã¼ã表ãã¦ããã
<p>
[<kbd>S</kbd>]
<a rel="start" href="/" accesskey="S">ãããããã®ã屿·</a>
ã«ã¤ãã¦ããã詳ããã¯ã
[<kbd>H</kbd>]
<a rel="help" href="/help/" accesskey="H">ãæ¡å
</a>
ãã覧ä¸ããã
</p>ä¸è¨ã®ä¾ã¯ã次ã®ããã«ã¬ã¿ãªã³ã°ãããã®ã§ãæç« ã¨ãã¦ä¸èªç¶ãªãã®ã§ãããã
[S] ãããããã®ã屿· ã«ã¤ãã¦ããã詳ããã¯ã[H] ãæ¡å ãã覧ä¸ããã
次ã®ä¾ã§ã¯ãå½è©²è¦ç´ ã«å²ãå½ã¦ãããã¢ã¯ã»ã¹ãã¼ã示ãã¨å ±ã«ãæç« ã¨ãã¦ã®ä¸èªç¶ããè§£æ¶ãã¦ããã
<p>
<a rel="start" href="/" accesskey="H">ãããããã®ã屿·</a>
ï¼ã¢ã¯ã»ã¹ãã¼ã¯[<kbd>S</kbd>]ã§ãï¼
ã«ã¤ãã¦ã
···ä¸è¨ã®ä¾ã¯ã次ã®ããã«ã¬ã¿ãªã³ã°ãããã
ãããããã®ã屿·(ã¢ã¯ã»ã¹ãã¼ã¯[S]ã§ã)ã«ã¤ãã¦ã···
ããã§ãæç« ã¨ãã¦ã®ä¸èªç¶ããæããã®ã§ããã°ãã¢ã¯ã»ã¹ãã¼ã示ãè¨è¿°ãspanè¦ç´ ã§å
æ¬ããCSSã«åªä½ã«ãã£ã¦ã¯é æ»
ãããããã¼æåã ãã表示ãããã¨ããæ¹æ³ãè¯ãããç¥ãã¾ããã
CSS2ã®çä¼¼ã¯ã©ã¹ã§ã¢ã¯ã»ã¹ãã¼ã表示ããã
åç¯ä»¥å¤ã«ããå²ãå½ã¦ãããã¢ã¯ã»ã¹ãã¼ã®ã¬ã³ããªã³ã°æ¹æ³ã¨ãã¦ã次ã®ãããªæ¹æ³ãããã¾ãã
次ã®ä¾ã§ã¯ãCSS2ã®çä¼¼ã¯ã©ã¹ãå©ç¨ãããã¨ã§ã¢ã¯ã»ã¹ãã¼ã表示ãããã¨ãã§ããã
/* ã¢ã¯ã»ã¹ãã¼ã表示ãã */
[accesskey]:before {
content: "<" attr(accesskey) ">";
font-size: x-small;
font-family: monospace;
font-weight: normal;
vertical-align: top;
margin: 0 .2em;
}ä¸è¨ã®ä¾ã¯ãã¦ã¼ã¶ã¹ã¿ã¤ã«ã·ã¼ããå©ç¨ãããã¨ãã§ããUAã§ããã°ãã¦ã¼ã¶ã¹ã¿ã¤ã«ã·ã¼ãã«è¨è¿°ãã¦å©ç¨ãããã¨ãã§ãã¾ãã
DOMãå©ç¨ãã¦ã¢ã¯ã»ã¹ãã¼ã表示ããã
åç¯ã®æ¹æ³ã ã¨ãMSIEã®ããã«CSS2ã¸ã®å¯¾å¿ãä¸å®å ¨ãªUAã§ã¯è¡¨ç¤ºãããã¨ãã§ãã¾ããï¼ç¾ç¶ã§ã¯ãMSIEã¦ã¼ã¶ãå¤ãã®ã§å°ã£ããã®ï¼ãããã§ã¯ãæ¬¡ã®æ§ã«DOMãç¨ãã¦ECMAScriptã§è¨è¿°ãã¦ã¿ãæ¹æ³ã¯ã©ãã§ããããï¼
次ã®ä¾ã§ã¯ãDOMãå©ç¨ãããã¨ã§ã¢ã¯ã»ã¹ãã¼ã表示ãããã¨ãã§ããã
//=========================================================================
// ã¢ã¯ã»ã¹ã»ãã¼ã表示ããã
// 弿°
// arg (çç¥å¯): å²ã¿æåã®éå§æåã¨çµäºæå [é
å]
// ä¾
// accesskeyMarks(); // å²ã¿æåã¯åæå¤: < >
// accesskeyMarks(["[","]"]); // å²ã¿æåã®æå®ä¾: [ ]
// åºå
¸
// http://purl.org/net/osamurai/weblog/2004/03/18#blog.20040318.1.4
//=========================================================================
function accesskeyMarks(arg) {
if (accesskeyMarks.arguments.length < 1 || arg.length < 2) arg = new Array("<", ">");
var NodeList = {
"a": document.getElementsByTagName('a'),
"area" : document.getElementsByTagName('area'),
"button" : document.getElementsByTagName('button'),
"input" : document.getElementsByTagName('input'),
"label" : document.getElementsByTagName('label'),
"legend" : document.getElementsByTagName('legend'),
"textarea" : document.getElementsByTagName('textarea')
};
for (var i in NodeList ) {
for (var j=0; j<NodeList[i].length; j++) {
var refElement = new Object(NodeList[i].item(j));
refElement.attr = {
"accesskey" : refElement.getAttribute('accesskey').toUpperCase(),
"title" : refElement.getAttribute('title')
};
if (refElement.attr["accesskey"]) {
var newElement = document.createElement('kbd');
var newText = document.createTextNode(arg[0] + refElement.attr["accesskey"] + arg[1]);
with (newElement) {
appendChild(newText);
setAttribute('class', 'accesskey');
setAttribute('title', 'accesskey: '+ refElement.attr["accesskey"]);
}
//-----------------------------------------------------------------------
// ã¢ã¯ã»ã¹ã»ãã¼ã表示ããã
//-----------------------------------------------------------------------
if (NodeList[i] == NodeList["input"]) {
refElement.parentNode.insertBefore(newElement, refElement);
} else {
refElement.insertBefore(newElement, refElement.firstChild);
}
//-----------------------------------------------------------------------
// â»ä»¥ä¸ã®å¦çã¯ãçç¥ãã¦ãæ§ããªãã
//-----------------------------------------------------------------------
// accesskey屿§ã¨åæã«title屿§ãåå¨ãããªããåºã§ã«title屿§å¤ãåå¦çã
//-----------------------------------------------------------------------
if (refElement.attr["title"]) {
refElement.setAttribute('title', arg[0] + refElement.attr["accesskey"] + arg[1] +': '+ refElement.attr["title"]);
}
//-----------------------------------------------------------------------
// MSIEã§ã¯çæè¦ç´ ã«CSSã®è¨å®ã使
ãåæ ãããªãã®ã§ã仿¹ãªãstyle屿§ãä»ä¸ã
//-----------------------------------------------------------------------
with (newElement.style) {
fontSize = ".83em";
verticalAlign = "text-top";
}
}
}
}
}ä¸è¨ã®ä¾ã¯ãç¶ããªãããDOM Level 1 ã«å¯¾å¿ããªãUAã§ã¯å©ç¨ã§ããªãã
æå¾ã«ã»ã»ã»
ãã¦ãããè¦ç´ ã«å²ãå½ã¦ãããã¢ã¯ã»ã¹ãã¼ã表示ããæ¹æ³ã«ã¤ãã¦è§¦ãã¦ããã®ã ããWCAG 1.0ã§ã¯ãã¢ã¯ã»ã·ããªãã£ã¼ã®åä¸ã®çºã«ãéè¦ãªãªã³ã¯ããã©ã¼ã ã«ã¢ã¯ã»ã¹ãã¼ãå²ãå½ã¦ããã¨ãæ¨å¥¨ããã¦ãã¾ããããã¦ãUAå´ã§ãã¼ã®å²ãå½ã¦ã示ããã¨ãã§ããããã«ãªãã¾ã§ã¯ãå²ãå½ã¦ããã¦ãããã¼ã示ãããã«ã¨ã®æ³¨ææ¸ããæ·»ãã¦ããã¾ãã
é³å£°èªã¿ä¸ãã½ããã¦ã§ã¢ï¼è¦è¦é害è â ãã¼ã ãã¼ã¸ãªã¼ãã¼ï¼ãå°å ¥ãã¦ããç°å¢ã§ã¯ãã©ã¡ããã®ãã¼ãã¼ãæä½ãä¸å¯è½ã«ãªãã¨ãããã¨ã¯å¤§å¤ãªè´å½å·ã§ããç¾ç¶ã§ã¯å¤ãã®UAã¯ãUAå´ã§ã¢ã¯ã»ã¹ãã¼ãè¨å®ã»å¤æ´ã§ããªãã®ã§ãéå°ãªã¢ã¯ã»ã¹ãã¼ã®å²ãå½ã¦ã¯æ¬æ«è»¢åã«ãªããããªãã®ã§æ³¨æãå¿ è¦ã§ãã
注é
- æ¬ãµã¤ãã®ã¢ã¯ã»ã¹ãã¼ã«ã¤ãã¦ã¯ãããã²ã¼ã·ã§ã³ã«ã¤ãã¦ãã覧ä¸ããã
- ä¾ã§ç¤ºããµã³ãã«ã½ã¼ã¹ã¯ããèªç±ã«ãå©ç¨ãã ãããã¾ããæ¹è¯ãå ããããå ´åã«ã¯ããé£çµ¡ãé ããã¨å¹¸ãã§ãã