Accessibility/AT-Windows-API: Difference between revisions

 
(10 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Gecko Info for Windows Accessibility Vendors =
<small>[[Accessibility |<< Back to Accessibility Home Page]]</small>
 
= Propose =
 
<div class="note">This documentation is out of date. You may want use new all-in-one [http://developer.mozilla.org/en/docs/Accessibility:AT-APIs documentation].</div>


This FAQ explains how makers of Windows screen readers, voice dictation packages and magnification software can support Gecko-based software. The base of our support for these products is MSAA (Microsoft Active Accessibility), external readonly DOM support, and the keyboard API/user interface.
This FAQ explains how makers of Windows screen readers, voice dictation packages and magnification software can support Gecko-based software. The base of our support for these products is MSAA (Microsoft Active Accessibility), external readonly DOM support, and the keyboard API/user interface.


== Definitions ==
= Definitions =


Here are some basic definitions that you'll need for this document to make sense:
Here are some basic definitions that you'll need for this document to make sense:
Line 20: Line 24:
: please read the MSAA documentation on MSDN if you are unfamiliar with these. in general we abbreviate by removing redundant words. For example, we may say EVENT_ALERT instead of the full EVENT_SYSTEM_ALERT.
: please read the MSAA documentation on MSDN if you are unfamiliar with these. in general we abbreviate by removing redundant words. For example, we may say EVENT_ALERT instead of the full EVENT_SYSTEM_ALERT.


=== MSAA tree vs. DOM tree - what's the relation? ===
== MSAA tree vs. DOM tree - what's the relation? ==


[[Image:at-windows-api-tree-relativity.gif|Diagram showing MSAA tree is a subset of the DOM tree]]
[[Image:at-windows-api-tree-relativity.gif|Diagram showing MSAA tree is a subset of the DOM tree]]
Line 28: Line 32:
Anything that is focusable or conveys important information about the structure of the document is exposed in the MSAA tree of IAccessibles.
Anything that is focusable or conveys important information about the structure of the document is exposed in the MSAA tree of IAccessibles.


== Windows Applications Based on the Gecko Layout Engine ==
= Windows Applications Based on the Gecko Layout Engine =


Gecko is a rendering engine that Mozilla, Netscape and other new browsers use. Gecko can render a variety of content, not just HTML and supports key web standards such as Cascading Style Sheets, Javascript and the W3C DOM. Gecko also handles the users keystrokes and mouse clicks. Gecko is the core architecture that we are adding accessibility to, in order to support basic accessibility in all applications that are based on it.
Gecko is a rendering engine that Mozilla, Netscape and other new browsers use. Gecko can render a variety of content, not just HTML and supports key web standards such as Cascading Style Sheets, Javascript and the W3C DOM. Gecko also handles the users keystrokes and mouse clicks. Gecko is the core architecture that we are adding accessibility to, in order to support basic accessibility in all applications that are based on it.


=== Embedded Clients (support MSAA) ===
== Embedded Clients (support MSAA) ==


Embedded clients use Gecko only in the content window, at the moment for HTML and generic XML only. They typically use standard Windows controls for their user interface -- the area outside of the client content window, plus the context menu.
Embedded clients use Gecko only in the content window, at the moment for HTML and generic XML only. They typically use standard Windows controls for their user interface -- the area outside of the client content window, plus the context menu.
Line 39: Line 43:
* [http://kmeleon.sourceforge.net/ K-Meleon]<nowiki>: a light, ultra-fast and more advanced (fully configurable) Gecko-based web browser available on the Windows platform</nowiki>
* [http://kmeleon.sourceforge.net/ K-Meleon]<nowiki>: a light, ultra-fast and more advanced (fully configurable) Gecko-based web browser available on the Windows platform</nowiki>


=== XUL-Based Clients (support MSAA) ===
== XUL-Based Clients (support MSAA) ==


XUL-based clients make full use of the Gecko architecture, not only for HTML content, as well as for menus, dialogs and the entire user interface via an XML language called XUL (eXtensible User-interface Language). None of the user interface contains standard Windows controls -- not even the menus! This is done to ensure a common look and feel across all supported platforms, and to allow for different skins (appearances).
XUL-based clients make full use of the Gecko architecture, not only for HTML content, as well as for menus, dialogs and the entire user interface via an XML language called XUL (eXtensible User-interface Language). None of the user interface contains standard Windows controls -- not even the menus! This is done to ensure a common look and feel across all supported platforms, and to allow for different skins (appearances).
Line 47: Line 51:
* Mozilla Seamonkey (''please use 1.8 alpha builds or later'')
* Mozilla Seamonkey (''please use 1.8 alpha builds or later'')


== How to Find the Content Window and Load the Document ==
= How to Find the Content Window and Load the Document =
 
<div class="indent">


Screen readers need to find the content window so that they know where to start grabbing the MSAA tree, in order to load the current document into a buffer in their own process. The content window always has the class MozillaContentWindowClass.
Screen readers need to find the content window so that they know where to start grabbing the MSAA tree, in order to load the current document into a buffer in their own process. The content window always has the class MozillaContentWindowClass.
Line 69: Line 71:
Gecko also helps determine when to load a new window by firing two EVENT_STATE_CHANGE's on the root ROLE_DOCUMENT accessible -- the first state change indicates the document pane is now busy loading. The second state change indicates the document pane has finished. When handling the event, use get_accState() to check the STATE_BUSY flag. When the document has finished loading the busy flag will be cleared.
Gecko also helps determine when to load a new window by firing two EVENT_STATE_CHANGE's on the root ROLE_DOCUMENT accessible -- the first state change indicates the document pane is now busy loading. The second state change indicates the document pane has finished. When handling the event, use get_accState() to check the STATE_BUSY flag. When the document has finished loading the busy flag will be cleared.


</div>
= MSAA Support: IAccessible Methods =
 
== MSAA Support: IAccessible Methods ==
 
<div class="indent">


To use MSAA with Gecko, you'll need the tools and docs that come with the [http://www.microsoft.com/downloads/details.aspx?FamilyId=3755582A-A707-460A-BF21-1373316E13F0&displaylang=en Active Accessibility 2.0 SDK Tools]. The method <code>AccessibleObjectFromWindow()</code> will get you the root IAccessible corresponding to the top level window. Hold on to this root IAccessible, and use it to walk through the entire tree of IAccessible's.
To use MSAA with Gecko, you'll need the tools and docs that come with the [http://www.microsoft.com/downloads/details.aspx?FamilyId=3755582A-A707-460A-BF21-1373316E13F0&displaylang=en Active Accessibility 2.0 SDK Tools]. The method <code>AccessibleObjectFromWindow()</code> will get you the root IAccessible corresponding to the top level window. Hold on to this root IAccessible, and use it to walk through the entire tree of IAccessible's.
Line 96: Line 94:
* get_accKeyboardShortcut
* get_accKeyboardShortcut


</div>
= MSAA Support: IAccessible Events and Unique ID's =
 
== MSAA Support: IAccessible Events and Unique ID's ==
 
<div class="indent">


=== What MSAA events do we support? ===
== What MSAA events do we support? ==


* EVENT_FOCUS is fired for focus changes on any kind of focusable object
* EVENT_FOCUS is fired for focus changes on any kind of focusable object
Line 117: Line 111:
* EVENT_SELECTIONWITHIN is fired on multi selection containers when the current selection changes within. In addition, EVENT_SELECTIONADD and EVENT_SELECTIONREMOVE are fired on the the child who's selection changed.
* EVENT_SELECTIONWITHIN is fired on multi selection containers when the current selection changes within. In addition, EVENT_SELECTIONADD and EVENT_SELECTIONREMOVE are fired on the the child who's selection changed.


=== How to track where the event happened, within your own offscreen model ===
== How to track where the event happened, within your own offscreen model ==
 
<div class="indent">


Ordinary zero-indexed child IDs are not practical for representing events. The problem is that the child ID system that is used by MSAA doesn't work well when you have a deep tree of objects in a window. It would be impractical to number all of the nodes in a document starting at 0, because whenever a node is inserted or removed it would be computationally very expensive to renumber things. So, the Firefox childID handed back from events is based on an algorithm that uses the pointer value of the related internal DOM node. This computed child ID for events is always a negative value, unique to the IAccessible firing the event
Ordinary zero-indexed child IDs are not practical for representing events. The problem is that the child ID system that is used by MSAA doesn't work well when you have a deep tree of objects in a window. It would be impractical to number all of the nodes in a document starting at 0, because whenever a node is inserted or removed it would be computationally very expensive to renumber things. So, the Firefox childID handed back from events is based on an algorithm that uses the pointer value of the related internal DOM node. This computed child ID for events is always a negative value, unique to the IAccessible firing the event
Line 127: Line 119:
Because screen readers usually cache an entire document's worth of data, it can be extremely useful for them to receive a child ID that helps them correlate back to a known object. We provide support for this technique via ISimpleDOMNode::get_nodeInfo(), which returns a uniqueID for any IAccessible that can be cached in the internal model. When an event is received, the negative childID should match one of these cached uniqueID's, if the entire document has been stored and kept current. Keeping an internal cache current means getting new subtrees of IAccessibles whenever an EVENT_REORDER is received, indicating important changes have invalidated part of the model.
Because screen readers usually cache an entire document's worth of data, it can be extremely useful for them to receive a child ID that helps them correlate back to a known object. We provide support for this technique via ISimpleDOMNode::get_nodeInfo(), which returns a uniqueID for any IAccessible that can be cached in the internal model. When an event is received, the negative childID should match one of these cached uniqueID's, if the entire document has been stored and kept current. Keeping an internal cache current means getting new subtrees of IAccessibles whenever an EVENT_REORDER is received, indicating important changes have invalidated part of the model.


</div> </div>
= MSAA Features We Do Not Support =
 
== MSAA Features We Do Not Support ==


<div class="indent">
<div class="indent">
Line 150: Line 140:
  </div>
  </div>


== Intentional Differences with Internet Explorer ==
= Intentional Differences with Internet Explorer =


<div class="indent">
<div class="indent">
Line 156: Line 146:
For the most part, where we support an MSAA feature, we have tried to duplicate Internet Explorer's use of it. Please let us know if you find any differences not listed here:
For the most part, where we support an MSAA feature, we have tried to duplicate Internet Explorer's use of it. Please let us know if you find any differences not listed here:


=== Accessible Relations are Supported ===
== Accessible Relations are Supported ==


<div class="indent">
<div class="indent">
Line 194: Line 184:
  </div>
  </div>


=== Checkable, Required and Invalid States are Supported ===
== Checkable, Required and Invalid States are Supported ==


<div class="indent">
<div class="indent">
Line 212: Line 202:
  </div>
  </div>


=== Document Structure Exposed in MSAA Tree ===
== Document Structure Exposed in MSAA Tree ==


<div class="indent">
<div class="indent">
Line 227: Line 217:
  </div>
  </div>


=== Positional Descriptions are Supported ===
== Positional Descriptions are Supported ==


<div class="indent">
<div class="indent">
Line 243: Line 233:
  </div>
  </div>


=== DHTML Accessibility is Supported ===
== DHTML Accessibility is Supported ==


<div class="indent">
<div class="indent">
Line 251: Line 241:
  </div>
  </div>


=== IAccessibles Persist ===
== IAccessibles Persist ==


<div class="indent">
<div class="indent">
Line 259: Line 249:
  </div>
  </div>


=== Page Loading is Tracked via STATE_CHANGE events ===
== Page Loading is Tracked via STATE_CHANGE events ==


<div class="indent">
<div class="indent">
Line 269: Line 259:
  </div> </div>
  </div> </div>


== MSAA Role Support ==
= MSAA Role Support =


{| class="standard-table" summary="This table shows what MSAA roles Gecko supports, what markup is used to create objects with those roles, and any special features that objects with those roles support"
{| class="standard-table" |
|+ This table shows what MSAA roles Gecko supports, what markup is used to create objects with those roles, and any special features that objects with those roles support.
! scope="col" | Role
! scope="col" | Role
! scope="col" | Supported?
! scope="col" | Supported?
Line 280: Line 271:
|  
|  
|-
|-
| ROLE_MENUBAR
| rowspan="2" | ROLE_MENUBAR
|
| XUL: <nowiki><menubar/></nowiki>
XUL: <menubar><br /> DHTML: role="wairole:menubar"
| rowspan="2" | Fires EVENT_MENUSTART and EVENT_MENUEND
| Fires EVENT_MENUSTART and EVENT_MENUEND
|-
| DHTML: role="wairole:menubar"
|-
|-
| ROLE_SCROLLBAR
| ROLE_SCROLLBAR
Line 305: Line 297:
| Fires EVENT_SHOW, EVENT_HIDE, EVENT_LOCATIONCHANGE
| Fires EVENT_SHOW, EVENT_HIDE, EVENT_LOCATIONCHANGE
|-
|-
| ROLE_ALERT
| rowspan="3" | ROLE_ALERT
| XUL: <browser> <br/> DHTML: role="wairole:alert" <br/> XForms: <message/>, <alert/>, <help/>  
| XUL: <nowiki><browsermessage/></nowiki>
| Fires EVENT_ALERT
| rowspan="3" | Fires EVENT_ALERT
|-
| DHTML: role="wairole:alert"
|-
| XForms: <nowiki><message/>, <alert/>, <help/></nowiki>
|-
|-
| ROLE_WINDOW
| ROLE_WINDOW
Line 313: Line 309:
|  
|  
|-
|-
| ROLE_CLIENT
| rowspan="2" | ROLE_CLIENT
|
| XUL: <nowiki><browser/></nowiki>
XUL: <browser><br /> HTML: <frame> or <iframe>
|-
|
| HTML: <nowiki><frame> or <iframe></nowiki>
|-
|-
| ROLE_MENUPOPUP
| ROLE_MENUPOPUP
Line 323: Line 319:
| Fires EVENT_MENUPOPUPSTART, EVENT_MENUPOPUPEND
| Fires EVENT_MENUPOPUPSTART, EVENT_MENUPOPUPEND
|-
|-
| ROLE_MENUITEM
| rowspan="3" | ROLE_MENUITEM
|
| XUL: <nowiki><menuitem/></nowiki>
XUL: <menuitem/><br /> DHTML: role="wairole:menuitem"<br /> XForms: <item/> of minimal <select1/> in XHTML document
| rowspan="2" | Sets STATE_CHECKED for radio or checkbox menuitem types
|
Sets STATE_CHECKED for radio or checkbox menuitem types


Accelerator key comes in accName after a \t (TAB) character. For example, "Open\tCtrl+O"
Accelerator key comes in accName after a \t (TAB) character. For example, "Open\tCtrl+O"
|-
| DHTML: role="wairole:menuitem"
|-
| XForms: <item/> of minimal <select1/> in XHTML document
|
|-
|-
| ROLE_TOOLTIP
| ROLE_TOOLTIP
Line 370: Line 369:
| n/a
| n/a
|-
|-
| ROLE_DIALOG
| rowspan="2" | ROLE_DIALOG
|
| XUL: <nowiki><dialog/></nowiki>
XUL: <dialog><br /> DHTML: role="wairole:dialog"
| rowspan="2" | accName() exposes the <nowiki><title></nowiki> of the current dialog.
 
|-
accName() exposes the <title> of the current dialog.
| DHTML: role="wairole:dialog"
|  
|-
|-
| ROLE_BORDER
| ROLE_BORDER
Line 381: Line 379:
|  
|  
|-
|-
| ROLE_GROUPING
| rowspan="4" | ROLE_GROUPING
| HTML: <fieldset><br /> XUL: <groupbox><br /> DHTML: role="wairole:group" or DHTML: role="wairole:radiogroup"<br />XForms: compact <select/>, minimal <select1/> in XUL document, xsd:gMonth/xsd:gDay types <input/>
| HTML: <fieldset>
| For a <fieldset> the name is exposed using the <legend>
| For a <fieldset> the name is exposed using the <legend>
|-
|-
| ROLE_SEPARATOR
| XUL: <groupbox>
| XUL: <separator><br /> HTML: <nowiki><hr></nowiki><br /> DHTML: role="wairole:separator"
|
|
|-
| DHTML: role="wairole:group" or role="wairole:radiogroup"
|
|-
| XForms: <nowiki>compact <select/>, minimal <select1/> in XUL document, <input/> of xsd:gMonth/xsd:gDay types</nowiki>
|
|-
| rowspan="3" | ROLE_SEPARATOR
| XUL: <nowiki><separator/></nowiki>
| rowspan="3" |
|-
| HTML: <nowiki><hr></nowiki>
|-
| DHTML: role="wairole:separator"
|-
|-
| ROLE_TOOLBAR
| ROLE_TOOLBAR
Line 453: Line 464:
| n/a
| n/a
|-
|-
| ROLE_LIST
| rowspan="3" | ROLE_LIST
| XUL: <listbox><br /> HTML: <select size=""> where size > 1 -- STATE_READONLY is off<br /> HTML: <ol> or <ul> -- STATE_READONLY is on<br /> DHTML: role="wairole:list"
| XUL: <nowiki><listbox></nowiki>
|  
|
|-
| HTML: <nowiki><select size=""> where size > 1 -- STATE_READONLY is off</nowiki><br /> <nowiki>HTML: <ol> or <ul> -- STATE_READONLY is on</nowiki>
|
|-
| DHTML: role="wairole:list"
|
|-
| rowspan="3" | ROLE_LISTITEM
| HTML: <nowiki><li>, <option> or <optgroup></nowiki>
| rowspan="3" | Sets STATE_SELECTED if the current listitem is selected.
|-
| DHTML: role="wairole:listitem"
|-
|-
| ROLE_LISTITEM
| XUL: <nowiki><listitem/></nowiki>
| HTML: <li>, <option> or <optgroup> <br /> DHTML: role="wairole:listitem"<br /> XUL: <listitem>
| Sets STATE_SELECTED if the current listitem is selected.
|-
|-
| ROLE_OUTLINE
| ROLE_OUTLINE
Line 495: Line 516:
Sets STATE_TRAVERSED if within visited link.
Sets STATE_TRAVERSED if within visited link.
|-
|-
| ROLE_STATICTEXT
| rowspan="4" | ROLE_STATICTEXT
|
| XUL: <label> or <description>
XUL: <label> or <description><br /> HTML: <label><br /> DHTML: role="wairole:label" or<br /> role="wairole:description"<br />XForms: <output/>, <label/>
| rowspan="4" | Supports NAVRELATION_LABEL_FOR and NAVRELATION_DESCRIPTION_FOR via accNavigate().
|
Supports NAVRELATION_LABEL_FOR and NAVRELATION_DESCRIPTION_FOR via accNavigate().


The accName is an accumulation of the descendents' accNames, so may be considered redundant with them.
The accName is an accumulation of the descendents' accNames, so may be considered redundant with them.
Line 505: Line 524:
The accName is also reflected in the accName of a form control that this labels, which is a good reason to check NAVRELATION_LABEL_FOR.
The accName is also reflected in the accName of a form control that this labels, which is a good reason to check NAVRELATION_LABEL_FOR.
|-
|-
| ROLE_ENTRY
| HTML: <nowiki><label></nowiki>
|
|-
Normal web text uses no tag or element, uses STATE_READONLY<br /> For editable text, that state is cleared.<br /> XUL: <textbox><br /> HTML: <input type="text"> or <textarea><br /> DHTML: role="wairole:textfield" or<br /> role="wairole:textarea"<br />XForms: default <input/>
| DHTML: role="wairole:label" or<br /> role="wairole:description"
|
|-
Sets STATE_LINKED if within link.
|XForms: <nowiki><output/>, <label/></nowiki>
|-
|-
| ROLE_TEXT
| Normal web text uses no tag or element, uses STATE_READONLY<br /> For editable text, that state is cleared.
| Sets STATE_LINKED if within link.


Sets STATE_TRAVERSED if within visited link.
Sets STATE_TRAVERSED if within visited link.
Sets STATE_HASPOPUP for autocomplete textfields
|-
|-
| ROLE_PUSHBUTTON
| rowspan="4" | ROLE_ENTRY
| HTML: <nowiki><input type="text"> or <textarea></nowiki>
| rowspan="4" | Sets STATE_HASPOPUP for autocomplete textfields
|-
| XUL: <textbox>
|-
| DHTML: role="wairole:textfield" or<br /> role="wairole:textarea"
|-
|XForms: default <input/>
|-
| rowspan="4" | ROLE_PUSHBUTTON
| XUL: <button>
| rowspan="3" | Sets STATE_HASPOPUP for buttons containing menus
|-
| HTML: <input type= "button"> or<button>
|-
| DHTML: role="wairole:button"
|-
| XForms: <trigger/>, <submit/>
|
|
XUL: <button><br /> HTML: <input type= "button"> or<button><br /> DHTML: role="wairole:button"<br />XForms: <trigger/>, <submit/>
| Sets STATE_HASPOPUP for buttons containing menus
|-
|-
| ROLE_CHECKBUTTON
| rowspan="4" | ROLE_CHECKBUTTON
|
| XUL: <checkbox>
XUL: <checkbox><br /> HTML: <input type="checkbox"><br /> DHTML: role="wairole:checkbox"<br />XForms: <item/> of full <select/>
| rowspan="4" | Fires EVENT_STATE_CHANGE when checkbox is toggled
|
|-
Fires EVENT_STATE_CHANGE when checkbox is toggled
| HTML: <input type="checkbox">
|-
| DHTML: role="wairole:checkbox"
|-
| XForms: <nowiki><item/> of full <select/></nowiki> <br/> <nowiki> <input/> of boolean type</nowiki>
|-
| rowspan="4" | ROLE_RADIOBUTTON
| XUL: <radio>
| rowspan="4" | Fires EVENT_STATE_CHANGE when radiobutton is set
|-
| HTML: <input type="radio">
|-
| DHTML: role="wairole:radio"
|-
| XForms: <item/> of full <select1/>
|-
| rowspan="4" | ROLE_COMBOBOX
| XUL: <menulist>
| rowspan="4" | Fires EVENT_VALUECHANGE when current combobox option changes.
|-
| HTML: <select size="1">
|-
|-
| ROLE_RADIOBUTTON
| DHTML: role="wairole:combobox"
|
XUL: <radio><br /> HTML: <input type="radio"><br /> DHTML: role="wairole:radio"<br />XForms: <item/> of full <select1/>
|
Fires EVENT_STATE_CHANGE when radiobutton is set
|-
|-
| ROLE_COMBOBOX
| XForms: <select1/> in XHTML document
|
XUL: <menulist><br /> HTML: <select size="1"><br /> DHTML: role="wairole:combobox"<br />XForms: <select1/> in XHTML document
| Fires EVENT_VALUECHANGE when current combobox option changes.
|-
|-
| ROLE_DROPLIST
| ROLE_DROPLIST
Line 545: Line 596:
! Unique features
! Unique features
|-
|-
| ROLE_PROGRESSBAR
| rowspan="2" | ROLE_PROGRESSBAR
|
| XUL: <nowiki><progressmeter/></nowiki>
XUL: <progressmeter><br /> DHTML: role="wairole:progressbar"
| rowspan="2" | Fires EVENT_VALUECHANGE when progressbar moves by at least 3%
|
Fires EVENT_VALUECHANGE when progressbar moves by at least 3%


Fires EVENT_SHOW and EVENT_HIDE directly on ROLE_PROGRESSBAR when it appears/disappears as well as on ancestor container that visibility may have changed on.
Fires EVENT_SHOW and EVENT_HIDE directly on ROLE_PROGRESSBAR when it appears/disappears as well as on ancestor container that visibility may have changed on.
|-
| DHTML: role="wairole:progressbar"
|-
|-
| ROLE_DIAL
| ROLE_DIAL
Line 561: Line 612:
| n/a
| n/a
|-
|-
| ROLE_SLIDER
| rowspan="3" | ROLE_SLIDER
|
| XUL: <slider>
XUL: <slider><br /> DHTML: role="wairole:slider"
| rowspan="3" | Fires EVENT_VALUECHANGE when slider moves.
|
|-
Fires EVENT_VALUECHANGE when slider moves.
| DHTML: role="wairole:slider"
|-
| XForms: <nowiki><range/></nowiki>
|-
|-
| ROLE_SPINBUTTON
| ROLE_SPINBUTTON
Line 605: Line 658:
|-
|-
| "bullet"
| "bullet"
| Indirectly created for bullets when <ol> or <ul> used to create an HTML list
| <nowiki>Indirectly created for bullets when <ol> or <ul> used to create an HTML list</nowiki>
|  
|  
|-
|-
Line 617: Line 670:
|}
|}


== Enhancing Performance on the Client End via IEnumVARIANT ==
= Enhancing Performance on the Client End via IEnumVARIANT =


<div class="indent">
<div class="indent">
Line 627: Line 680:
  </div>
  </div>


== Avoiding Memory Leaks ==
= Avoiding Memory Leaks =


<div class="indent">
<div class="indent">
Line 637: Line 690:
  </div>
  </div>


== Additional DOM Support ==
= Additional DOM Support =


<div class="indent">
<div class="indent">
Line 649: Line 702:
* ISimpleDOMDocument contains basic document information, such title, URL, doctype and mime type.
* ISimpleDOMDocument contains basic document information, such title, URL, doctype and mime type.


=== Compiling the .idl Files ===
== Compiling the .idl Files ==


<div class="indent">
<div class="indent">
Line 661: Line 714:
  </div>
  </div>


=== ISimpleDOMNode ===
== ISimpleDOMNode ==


<div class="indent">
<div class="indent">
Line 775: Line 828:
  </div> </div>
  </div> </div>


=== ISimpleDOMText ===
== ISimpleDOMText ==


<div class="indent">
<div class="indent">
Line 813: Line 866:
</pre>
</pre>


=== ISimpleDOMDocument ===
== ISimpleDOMDocument ==


<div class="indent">
<div class="indent">
Line 843: Line 896:
</pre>
</pre>


== Keyboard User Interface and API ==
= Keyboard User Interface and API =


<div class="indent">
<div class="indent">
Line 849: Line 902:
Fortunately, Gecko uses the standard keyboard API's for each supported platform.
Fortunately, Gecko uses the standard keyboard API's for each supported platform.


For a large number of keyboard commands, we emulate Internet Explorer's keyboard shortcuts. Our [../keyboard/ keyboard plan] describes our current design and future possibilities.
For a large number of keyboard commands, we emulate Internet Explorer's keyboard shortcuts. Our [http://www.mozilla.org/access/keyboard/ keyboard plan] describes our current design and future possibilities.


  </div>
  </div>


== Beyond HTML: Other Types of Web Content ==
= Beyond HTML: Other Types of Web Content =


* You may have heard of some content types beyond HTML, and want to know if Gecko based products will support them:
* You may have heard of some content types beyond HTML, and want to know if Gecko based products will support them:
Line 862: Line 915:
* [http://www.xulplanet.com/ XUL]<nowiki>: The XML-based language used by Firefox and Mozilla to develop the UI. Similar to HTML in that it can be combined with CSS and Javascript to make powerful applications. Contains more desktop-style widgets than HTML and follows a box layout model, rather than being text-flow based. In the future more standalone applications will use XUL via </nowiki>[http://wiki.mozilla.org/XUL:Xul_Runner XULRunner].
* [http://www.xulplanet.com/ XUL]<nowiki>: The XML-based language used by Firefox and Mozilla to develop the UI. Similar to HTML in that it can be combined with CSS and Javascript to make powerful applications. Contains more desktop-style widgets than HTML and follows a box layout model, rather than being text-flow based. In the future more standalone applications will use XUL via </nowiki>[http://wiki.mozilla.org/XUL:Xul_Runner XULRunner].


== Questions or Comments? ==
= Questions or Comments? =


<div class="indent">
<div class="indent">
Confirmed users
1,396

edits