W3C home > Mailing lists > Public > public-html@w3.org > September 2007

Re: Proposal for Keyboard Shortcuts for HTML5

From: Charles McCathieNevile <chaals@opera.com>
Date: Fri, 21 Sep 2007 12:44:53 +0200
To: "Maciej Stachowiak" <mjs@apple.com>, "public-html@w3.org WG" <public-html@w3.org>
Message-ID: <op.tyz2s3hlwxe0ny@widsith.local>

Summary: I think the proposal makes sense in many aspects. I support the  
substance as "we need to fix keyboard shortcuts" and some of the details  
proposed (and have even made some of them to this group before [1][2]).

But I don't support introducing a new attribute. I think this proposal  
needlessly reinvents wheels rather than paving cowpaths, breaks backward  
compatibility, fails to resolve an existing problem with accesskeys (that  
IMHO is an implementation bug that has nothing to do with the markup spec  
and everything to do with poor implementation advice that was given in the  
HTML 4 spec), and makes assumptions about how accesskey can be implemented  
that are much more limited than even existing implementations.

The good stuff in this proposal can be applied directly to the accesskey  
attribute as it exists, leading to better, backwards-compatible  
implementations, while minimising the need to change all the guidance  
given and tools developed so far and obviating the need for a new  
attribute.

Details below...

On Thu, 20 Sep 2007 13:03:03 +0200, Maciej Stachowiak <mjs@apple.com>  
wrote:

> Keyboard shortcuts are useful for a number of reasons:
[some reasons]
> HTML 4.01 has a feature for keyboard shortcuts, the accesskey=""  
> attribute. But it has many problems:
>
> - It is tied to a specific control in the page. But in native  
> applications, many keyboard shortcuts do not have a direct one-to-one  
> correspondence with a specific control element. For example, you may  
> want a shortcut to focus an element that is also capable of activating,  
> or vice versa, but accesskey can't let you choose which to do. Or you  
> may want increment and decrement commands where the in-page UI is a  
> slider control.

This is indeed a problem of accesskey.

> - Keyboard shortcuts are not discoverable. It's not obvious looking at a  
> web application whether it even has keyboard shortcuts, let alone what  
> they are.
>
> - There are barriers to the UA making keyboard shortcuts discoverable.

This is an implementation issue. In Opera, if you activate accesskey mode  
(shift-esc is our current default, which I agree is non-intuitive. I remap  
it to one of the find-as-you-type shortcuts) then you see all the things  
that have accesskey. It would be helpful if there were an indicator that  
there is something there, but that's not a big deal.

In mobile implementations that I have used they generally do insert  
content - but these have been low-end mobile devices that don't do much  
presentation anyway. Showing, in high-end devices, that there is something  
there if you activate accesskey mode is not asking for a huge amount of  
real estate.

> - There are barriers to the web app making keyboard shortcuts  
> discoverable. The web app does not know what modifier keys the UA will  
> add, if any, so it cannot display the true shortcut in the page or in  
> help materials.

Indeed. This is not a barrier to doing it though, it is a very good reason  
why the web app typically should not do it. Poor implementation until now  
has meant that authors have tried to tell users what the key is since  
otherwise there is literally no way of knowing, in some popular browsers,  
that your common shortcuts have been "hijacked".

> - The set of keys available for shortcuts is not the same across  
> different devices, operating systems and browsers, but the syntax for  
> accesskey requires choosing one.

Indeed. But nothing in the syntax and markup as used today requires that  
the browser assign that key. Indeed, several middle-ware or  
extension-based implementations explicitly provide for re-mapping to  
something more useful for a given platform.

> - The UA may wish to present a list of available keyboard shortcuts to  
> the user in some sort of list, but there may not be a good label  
> available. All the UA can use is the label of the control, but a label  
> that's good in the context of the page may not be very good in an out- 
> of-context list.

There are several indicators that can be used. The content of a control  
(e.g. the text of a link, or an image used in a link) and the value of the  
title attribute are the most obvious. For form controls, the value of a  
<label> element. The example Maciej provided is a sadly common one where  
content is not very clear about what it does - a similar example is  
several controls labelled "click here". (There's a reason why WAI has been  
asking people not to do that for years - and a number of people got the  
message, though not all). For a desktop client it isn't that complicated  
to extract what the control activates, check whether anything else  
activates that control and whether anything that activates a different  
control has the same default label, and then use a heuristic to select the  
"best" label available. This could be written into an extension in userJS  
or similar. But you probably wouldn't want to run it on your phone - there  
it would be better built into a proxy...

> I have a proposal that I believe could provide a better solution:
>
> HTML5 introduces a new <command> element which allows commands to be  
> defined in an abstract way that can be shared by multiple UI elements.

This seems similar to the access element in XHTML 2. Maybe it would be  
better to give it the same name, and just improve the definition. Or is  
there some reason for being different that I have missed?

> I propose that the command element be given a new attribute, shortcutkey.

Why not call the attribute "key" (for comaptibility with XHTML2) or  
"accesskey" for compatibility with the Web?

> The value is either empty or a space-separated list of characters. If  
> the value is empty, the UA can assign any shortcut key combination it  
> wants. If a list is provided, the UA should use that as a list of  
> suggestions from most preferred to least preferred for a key that should  
> be assigned, [...]
> If none of the suggestions is available, the UA should assign a keyboard  
> shortcut as if the value were empty.

This is close to my accesskey proposal [1] but has an advantage in  
clarifying that you can have more than one character. A further  
clarifications that should be added:

  User agents should assign a unique control (e.g. key value) to each  
unique action. (Which answers the question "what happens if you have two  
controls with the same accesskey?" that is currently unspecified in HTML).

> in possible combination with one or modifier keys.

I strongly suggest implementations do not rely on using a modifier key as  
an accesskey mechanism. In most uesr agents today users expect a  
particular behaviour from modifier-plus-key for a number of combinations  
(as noted in the original mail), and overriding those makes for  
unpredictable behaviour. Indeed, the single biggest real problem with  
accesskey as implemented in Netscape, Firefox prior to version 2 and IE is  
that they override existing keys that users rely on.

> For traditional desktop UAs that they add a menu to their menu bar or a  
> toolbar, with a name like "Commands", "Shortcuts", "Page Shortcuts" or  
> similar, which includes the commands with their labels and the keyboard  
> shortcuts assigned by the UA. Check or radio commands could create check  
> or radio menu items.

This is roughly how Opera implemented accesskey.

> For mobile devices with only a numeric keypad available, they could  
> assign 0-9, * and # to shortcuts in some order and optionally display a  
> list of shortcuts with labels below the bottom of the page.

This is what existing mobile browsers generally do (except that most of  
them rely on those characters being specified as the accesskey already).  
In fact it makes more sense in many cases to provide an accesskey mode,  
the same as I suggest for desktop, since modern phone browsers use the raw  
keypad for a number of handy functions like moving the cursor, going to  
the top of the page, etc, to avoid requiring too much menu navigation for  
common functions.

> For devices with only touchscreen input and a virtual keyboard, it may  
> make sense to have no interface at all for keyboard shortcuts since  
> using a virtual keyboard is unlikely to be faster or easier than  
> interacting with the page directly.

Alternatively, it may make sense to do what Opera does on desktop: When  
you activate accesskey mode (which would be with a gesture) you get the  
menu that just contains the things that have accesskeys assigned. On a  
large page which would have required scrolling around to find the bit you  
want, then hitting the control, this may be quicker for common actions.

> Notes:
>
> - This is much closer than accesskey="" to the way keyboard shortcuts  
> work in native desktop applications, a proven and effective model.

In markup terms it is introducing a compulsory indirection. accesskey in  
HTML 4 didn't have that idea, but if you have a command element to provide  
the indirection as desired there is no reason I can see not to simply  
extend the applicability of accesskey to that element.

As far as I can see, the biggest value of the command element is that it  
solves the first problem you mentioned - that you can then assign a  
command to increasing the value on a slider, rather than just having one  
default action for a slider.

It is also known ("proven" by a significant preponderance of evidence)  
that changing established shortcuts is not helpful to users. So relying on  
modifier keys in a situation like the diversity of the Web, where the  
combinations are likely to conflict with other functions, is generally not  
helpful implementation advice.

> - The proposed model provides mode device-independence and  
> discoverability than accesskey does, either as implemented today or in  
> the best possible case in my opinion.

I think you have seriously underestimated how a decent implementation of  
accesskey would behave. Your proposal has a lot in common with my proposed  
suggestions [2], but there are further possibilities (some repeated in  
this mail) that could enhance the usefulness of a keyboard shortcut  
mechanism. As a design goal, my proposal maintained compatibility with the  
existing Web, and I deliberately avoided introducing anything new. (I  
assume that accesskey should "obviously" be applied to any element like  
command/xhtml2:access - but maybe I should be more explicit about that).

> - Assistive technologies generally know how to scan and operate  
> application menu bars, so on desktop systems the commands would likely  
> automatically be exposed to AT as well.

yes.

> - The name of the new attribute is deliberately different than  
> "accesskey", since the semantics and allowed values are different. This  
> makes it possible in theory for a page to use both accesskey and  
> shortcutkey on the same element, if we end up allowing them on the same  
> elements; they could have some level of keyboard access in older UAs but  
> get the better new model in HTML5 UAs. I also think "shortcut key" is a  
> better name, since keyboard shortcuts exist for all users, not just for  
> accessibility purposes.

Except as used by the "accessibility" community, accessibility on the web  
is generally understood to cover issues that relate to whether users can  
get to something or not. The specificity of covering people with  
disabilities isn't part of english anyway. (Change the language and the  
whole notion vanishes anyway).

If you maintained the accesskey name, and instead changed the stupid  
implementation advice that is in the HTML 4 spec, along the lines I  
proposed a few months ago [1] then you would in fact have the semantics  
you are looking for, plus compatibility with existing markup (and with the  
horrible implementations in some current browsers).

FWIW We have been doing some research into accesskey usage at Opera. I  
hope that we will be able to publish enough information to make this  
reproducible by anyone, but I can't promise anything yet. On a survey of  
about a million pages, accesskey is used in about 1% of them and it is  
used "right" according to the HTML 4 spec requirements, that is as a  
single character, a bit more than 99% (less than 99.5%) of the time. The  
most common accesskey is "s" and the keys listed by the UK government  
guidelines for their own websites (which have been taken up in other  
countries and in other languages - other than "s" they use digits which is  
nice for phones) seem to account for the majority of all keys assigned.

[1] http://lists.w3.org/Archives/Public/public-html/2007Jul/0185.html
[2] http://lists.w3.org/Archives/Public/public-html/2007Jul/0213.html is  
the

cheers

Chaals

-- 
   Charles McCathieNevile, Opera Software: Standards Group
   hablo español  -  je parle français  -  jeg lærer norsk
chaals@opera.com   http://snapshot.opera.com - Kestrel (9.5α1)
Received on Friday, 21 September 2007 10:45:21 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 9 May 2012 00:16:07 GMT