W3C home > Mailing lists > Public > wai-xtech@w3.org > July 2007

Re: Keyboard navigation in viewer pane - 3 scenarios.

From: Chris Blouch <cblouch@aol.com>
Date: Tue, 17 Jul 2007 11:46:12 -0400
Message-ID: <469CE444.4070000@aol.com>
To: Earl.Johnson@Sun.COM
CC: wai-xtech@w3.org, Tom Wlodkowski <Thomas.Wlodkowski@corp.aol.com>, Becky Gibson <Becky_Gibson@notesdev.ibm.com>

In my testing I attached by event handler to the document rather than to 
a specific DOM object. Maybe that makes a difference. In general I 
registered _keyget to hande all "keydown" events on the "document" 
object and then went from there. I attempted to stop event bubbling in 
several ways but in IE, control-p still brought up the print dialogue 
after executing my JS function. Here is part of my function:

_keyget:function(event){
   //In IE look in window.event on FF look in passed-in var
   e=event||window.event;
   var key=e.keyCode||e.which;

    Do stuff with the key

   //Stop propogation the IE way
   e.cancelBubble=true;
   e.returnValue=false;
   //Stop propogation the standards way
   if(e.stopPropagation){
      e.stopPropagation();
      e.preventDefault();
   }
   return false;
}

I registered the event this way:

ae(document,"keydown",_keyget);

and the ae function looks like this

//Add function fn to be called when object o fires event et
//Handles both the standard addEventListner and IE attachEvent ways to 
do this.
//Works around a pile of IE bugs/quirks with attachEvent
//Using m for the method works around a Safari quirk
ae:function(o,et,fn){
    var m="addEventListener",x,t=et+fn;
    if(o[m])o[m](et,fn,false);
    else if((x=o.attachEvent)){
        o['e'+t]=fn;
        o[t]=function(){o['e'+t](window.event)}
        x('on'+et,o[t]);
    }
}

Hope this helps.

CB

Earl.Johnson@Sun.COM wrote:
>
> Hi Chris;
>
> My understanding, from a researcch only stance, is all keysequences 
> can be repurposed in javascript so the browser never sees the 
> keypress. Here's a code example I found for how this might be done:
>
> -----------
>
> function repurposeKeyPress(e)
> {
> if (!e) e = window.event;
> if (e && e.keyCode == 40)
> {
> // handle Down key
> // return false; here to cancel the event
> }
> }
>
> <textarea onkeypress="return repurposeKeyPress(event);">...
> </textarea>
>
> ---------
>
> More examples of repurposing that works in Firefox at least, can be 
> checked out at the following link. It's biggest drawback tho, from an 
> IE perspective, is it is XHTML.
>
> I assumed a re-purposing function/method similar to this would work 
> for all since jabvascript, being in the page content, always sees the 
> keystrokes before the browsxer even. Your post has me unswure about my 
> assumption now tho - would something like the above function coupled 
> with the appropriate page m/u on the element overcome the example 
> issues you cite below or have you already tried something similar that 
> fails?
>
> Thanks Earl
>
>
>
> Chris Blouch wrote:
>
>> I'm not sure that the "same" keystrokes can be used. The main 
>> limitation is that the OS, browser and screen readers have already 
>> commandeered many of them for their own purposes. For example, in my 
>> testing I could make control-P do something on my web page but in IE 
>> is still causes the print dialog to pop up. On Firefox though I can 
>> actually take over control-P and make it do only my function. Alt-P 
>> is free so in my example I could use that instead of control-P to 
>> implement some behavior. Similar substitutions may be made for 
>> defined alt combinations. For example alt-t in IE brings up the Tools 
>> menu but control-T seems to be clear. So if we want an IE friendly 
>> solution we'll have to steer clear of any keyboard combinations which 
>> are already in use which limits how close our web widgets can emulate 
>> keyboard controls of OS-native widgets. Best we can probably do is 
>> "similar" key combinations.
>>
>> Chris Blouch
>>
>> Earl.Johnson@Sun.COM wrote:
>>
>>>
>>> Hi Tom;
>>>
>>> I think the agreement coming out of our last meeting was basically 
>>> "widgets that have a desktop component counterpart [e.g. tabbed 
>>> pane] should implement the same keystrokes as their desktop brethren."
>>>
>>> To simplify things for our purposes [i.e. disregard flash player, 
>>> etc], we could say there are 3 possibilities for page content:
>>>    1. Contains only dojo javascript widgets
>>>    2. Contains dojo javascript widgets and html4 elements outside 
>>> the widgets [e.g. Netflix?]
>>>    3. Old Bessie: all html4 elements
>>>
>>> I don't recall the outcome of discussions when it came to scenarios 
>>> 2&3. It sounded like this topic has been discussed multiple times 
>>> before I joined in but I'd appreciate making sure I understand what 
>>> will happen when someone hits a scenario 2&3 page. Would it be 
>>> possible to spend a little more time on this discussion in 
>>> tommorrow's styleguide meeting [if there is one]?
>>>
>>> Thanks, Earl
>>>
>>>
>
>
Received on Tuesday, 17 July 2007 15:47:36 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Friday, 27 April 2012 13:15:43 GMT