Comparison of layout engines (DOM)

From Freepedia

The following tables compare DOM compatibility and support for a number of layout engines. Please see the individual products' articles for further information. This article is not all-inclusive or necessarily up-to-date. Unless otherwise specified in footnotes, comparisons are based on the stable versions without any add-ons, extensions or external programs.

For feature that is fully supported (based on DOM Level 2 or DOM Level 3 modules that are under W3C Recommendation), an exact version number is given if it is certain that the feature was added in such version; otherwise, a rough version number is given (e.g. < 2.0 means that the feature was supported since version 2.0 or below). DOM Level 0 and DOM Level 3 modules that are still under development are not included.

Contents

General overview

Trident Tasman Gecko WebCore KHTML Presto iCab
DOM1 6.0 0 1.0 85 Yes 7.0 Yes
DOM2 Minor Minor Major Major Major Major Major
DOM3 No No Minor Minor Minor Minor Minor
Trident Tasman Gecko WebCore KHTML Presto iCab

Core (Fundamental)

The interfaces within this section are considered fundamental, and must be fully implemented by all conforming implementations of the DOM, including all HTML DOM implementations.

Trident Tasman Gecko WebCore KHTML Presto iCab
Exception DOMException
DOM1 code  ?  ? 1.0  ?  ? 7.0  ?
Interface DOMStringList
DOM3 length No No No  ?  ?  ?  ?
contains() No No No  ?  ?  ?  ?
item() No No No  ?  ?  ?  ?
Interface NameList
DOM3 length No No No No No No No
getName() No No No No No No No
getNamespaceURI() No No No No No No No
contains() No No No No No No No
containsNS() No No No No No No No
Interface DOMImplementationList
DOM3 length No No No No No No No
item() No No No No No No No
Interface DOMImplementationSource
DOM3 getDOMImplementation() No No No No No No No
getDOMImplementationList() No No No No No No No
Interface DOMImplementation
DOM1 hasFeature() ≤ 6.0  ? 1.0  ?  ? 7.0  ?
DOM2 createDocumentType() No No 1.0  ?  ? 8.0  ?
createDocument() No No 1.0  ?  ? 8.0  ?
DOM3 getFeature() No No No  ?  ? ≤ 8.0  ?
Interface DocumentFragment
DOM1 (no properties) ≤ 6.0 No 1.0  ?  ? 7.0  ?
Interface Document
DOM1 doctype No 0 1.0  ?  ? 7.0  ?
implementation No 0 1.0  ?  ? 7.0  ?
documentElement 5.0 0 1.0  ?  ? 7.0  ?
createElement() 4.0 0 1.0  ?  ? 7.0  ?
createDocumentFragment() 6.0 No 1.0  ?  ? 7.0  ?
createTextNode() 5.0 0 1.0  ?  ? 7.0  ?
createComment() 6.0 No 1.0  ?  ? 7.0  ?
createCDATASection() No No 1.0  ?  ? 8.0  ?
createProcessingInstruction()  ?  ? 1.7  ?  ? 8.0  ?
createAttribute() 5.0 0 1.0  ?  ? 7.0  ?
createEntityReference()  ?  ? 1.0  ?  ? No  ?
getElementsByTagName() 5.0 0 1.0  ?  ? 7.0  ?
DOM2 importNode() No No 1.0  ?  ? 7.0  ?
createElementNS() No No 1.0  ?  ? 8.0  ?
createAttributeNS() No No 1.0  ?  ? 8.0  ?
getElementsByTagNameNS() No No 1.0  ?  ? 8.0  ?
getElementById() 5.0 0 1.0  ?  ? 7.0  ?
DOM3 inputEncoding No No ≤ 1.7  ?  ? No  ?
xmlEncoding No No ≤ 1.7  ?  ? No  ?
xmlStandalone No No ≤ 1.7  ?  ? No  ?
xmlVersion No No ≤ 1.7  ?  ? No  ?
domConfig No No No  ?  ? No  ?
strictErrorChecking No No ≤ 1.7  ?  ? No  ?
documentURI No No ≤ 1.7  ?  ? No  ?
adoptNode() No No ≤ 1.7  ?  ? No  ?
normalizeDocument() No No ≤ 1.7  ?  ? No  ?
renameNode() No No ≤ 1.7  ?  ? No  ?
Interface Node
DOM1 nodeName 5.0 0 1.0  ?  ? 7.0  ?
nodeValue 5.0 0 1.0  ?  ? 7.0  ?
nodeType 5.0 0 1.0  ?  ? 7.0  ?
parentNode 5.0 0 1.0  ?  ? 7.0  ?
childNodes 5.0 0 1.0  ?  ? 7.0  ?
firstChild 5.0 0 1.0  ?  ? 7.0  ?
lastChild 5.0 0 1.0  ?  ? 7.0  ?
previousSibling 5.0 0 1.0  ?  ? 7.0  ?
nextSibling 5.0 0 1.0  ?  ? 7.0  ?
attributes 5.0 0 1.0  ?  ? 7.0  ?
ownerDocument 5.0 0 Partial  ?  ? 7.0  ?
insertBefore() 5.0 0 Partial  ?  ? 7.0  ?
replaceChild() 5.0 0 Partial  ?  ? 7.0  ?
removeChild() 5.0 0 Partial  ?  ? 7.0  ?
appendChild() 5.0 0 Partial  ?  ? 7.0  ?
hasChildNodes() No 0 1.0  ?  ? 7.0  ?
cloneNode() 5.0 0 1.0  ?  ? 7.0  ?
DOM2 namespaceURI 5.0 0 1.0  ?  ? 7.0  ?
prefix 5.0 0 1.0  ?  ? 7.0  ?
localName 5.0 0 1.0  ?  ? 7.0  ?
isSupported() No 0 1.0  ?  ? 7.0  ?
hasAttributes() No 0 1.0  ?  ? 7.0  ?
DOM3 baseURI No No ≤ 1.7  ?  ? No  ?
textContent No No ≤ 1.7  ?  ? No  ?
compareDocumentPosition() No No ≤ 1.7  ?  ? No  ?
isSameNode() No No No  ?  ? No  ?
lookupPrefix() No No ≤ 1.7  ?  ? No  ?
isDefaultNamespace() No No ≤ 1.7  ?  ? No  ?
lookupNamespaceURI() No No ≤ 1.7  ?  ? No  ?
isEqualNode() No No No [1]  ?  ? No  ?
getFeature() No No ≤ 1.7  ?  ? No  ?
setUserData() No No ≤ 1.7  ?  ? No  ?
getUserData() No No ≤ 1.7  ?  ? No  ?
Interface NodeList
DOM1 length 5.0 0 1.0  ?  ? 7.0  ?
item() 5.0 0 1.0  ?  ? 7.0  ?
Interface NamedNodeMap
DOM1 length 5.0 0 1.0  ?  ? 7.0  ?
getNamedItem() 5.0 0 1.0  ?  ? 7.0  ?
setNamedItem() 5.0 0 1.0  ?  ? 7.0  ?
removeNamedItem() 5.0 0 1.0  ?  ? 7.0  ?
item() 5.0 0 1.0  ?  ? 7.0  ?
DOM2 getNamedItemNS() No No 1.0  ?  ? 7.0  ?
setNamedItemNS() No No 1.0  ?  ? 7.0  ?
removeNamedItemNS() No No 1.0  ?  ? 7.0  ?
Interface CharacterData
DOM1 data 4.0 0 1.0  ?  ? 7.0  ?
length 4.0 0 1.0  ?  ? 7.0  ?
substringData() 6.0 0 1.0  ?  ? 7.0  ?
appendData() 6.0 0 1.0  ?  ? 7.0  ?
insertData() 6.0 0 1.0  ?  ? 7.0  ?
deleteData() 6.0 0 1.0  ?  ? 7.0  ?
replaceData() 6.0 0 1.0  ?  ? 7.0  ?
Interface Attr
DOM1 name ≤ 6.0  ? 1.0  ?  ? 7.0  ?
specified No  ? 1.0  ?  ? 7.0  ?
value No  ? 1.0  ?  ? 7.0  ?
DOM2 ownerElement No  ? 1.0  ?  ? 7.0  ?
DOM3 schemaTypeInfo No No No  ?  ? No  ?
isId No No No  ?  ? No  ?
Interface Element
DOM1 tagName 4.0 0 1.0  ?  ? 7.0  ?
getAttribute() Incorrect 0 1.0  ?  ? 7.0  ?
setAttribute() Incorrect 0 1.0  ?  ? 7.0  ?
removeAttribute() Incorrect 0 1.0  ?  ? 7.0  ?
getAttributeNode() 6.0 0 1.0  ?  ? 7.0  ?
setAttributeNode() No 0 1.0  ?  ? 7.0  ?
removeAttributeNode() No 0 1.0  ?  ? 7.0  ?
getElementsByTagName() 4.0 0 1.0  ?  ? 7.0  ?
normalize() No 0 1.0  ?  ? 7.0  ?
DOM2 getAttributeNS() No 0 1.0  ?  ? 8.0  ?
setAttributeNS() No 0 1.0  ?  ? 8.0  ?
removeAttributeNS() No 0 1.0  ?  ? 8.0  ?
getAttributeNodeNS() No 0 1.0  ?  ? 8.0  ?
setAttributeNodeNS() No 0 1.0  ?  ? 8.0  ?
getElementsByTagNameNS() No No 1.0  ?  ? 8.0  ?
hasAttribute() No 0 1.0  ?  ? 8.0  ?
hasAttributeNS() No 0 1.0  ?  ? 8.0  ?
DOM3 schemaTypeInfo No No No  ?  ? No  ?
setIdAttribute() No No No  ?  ? No  ?
setIdAttributeNS() No No No  ?  ? No  ?
setIdAttributeNode() No No No  ?  ? No  ?
Interface Text
DOM1 splitText() No 0 1.0  ?  ? 7.0  ?
DOM3 isElementContentWhitespace No No No  ?  ? No  ?
wholeText No No No  ?  ? No  ?
replaceWholeText() No No No  ?  ? No  ?
Interface Comment
DOM1 (no properties) 6.0 No 1.0  ?  ? 7.0  ?
Interface TypeInfo
DOM3 typeName No No No No No No No
typeNamespace No No No No No No No
isDerivedFrom() No No No No No No No
Interface UserDataHandler
DOM3 handle() No No No No No No No
Interface DOMError
DOM3 severity No No No No No No No
message No No No No No No No
type No No No No No No No
relatedException No No No No No No No
relatedData No No No No No No No
location No No No No No No No
Interface DOMErrorHandler
DOM3 handleError() No No No No No No No
Interface DOMLocator
DOM3 lineNumber No No No No No No No
columnNumber No No No No No No No
byteOffset No No No No No No No
utf16Offset No No No No No No No
relatedNode No No No No No No No
uri No No No No No No No
Interface DOMConfiguration
DOM3 parameterNames No No No  ?  ?  ?  ?
setParameter() No No No  ?  ?  ?  ?
getParameter() No No No  ?  ?  ?  ?
canSetParameter() No No No  ?  ?  ?  ?
Trident Tasman Gecko WebCore KHTML Presto iCab

Trident Core (Fundamental) notes

  1. getAttribute(), setAttribute(), removeAttribute()</tt> — returns, sets, and removes, respectively, the corresponding DOM property instead of the string value of the attribute. For example, element.getAttribute('onclick') returns element.onclick, which is a reference to a function and not a string. Another example: element.removeAttribute('class') does not work as expected; element.removeAttribute('className') must be called instead. [2]

Gecko Core (Fundamental) notes

  1. ownerDocument — ownerDocument of orphan Text and Attr nodes is null [3].
  2. insertBefore(), replaceChild(), removeChild(), appendChild() — Fails on Attr node [4]. appendChild does not work as expected for DocumentFragment node [5].
  3. createProcessingInstruction() — Does not work with XHTML prior to 1.7 [6].
  4. createEntityReference() — Supported, but returns null when the method is checked [7].
  5. domConfig — Not yet implemented. Known as config prior to 1.6 [8].

Presto Core (Fundamental) notes

  1. URI attribute value — All URI attribute values are resolved to full URI. Hence the value from getAttribute() and getAttributeNode() could be wrong if relative URIs are used.

Core (Extended)

The interfaces defined here form part of the DOM Core specification, but objects that expose these interfaces will never be encountered in a DOM implementation that deals only with HTML.

Trident Tasman Gecko WebCore KHTML Presto iCab
Interface CDATASection
DOM1 (no properties) No No 1.0  ?  ? No  ?
Interface DocumentType
DOM1 name No No 1.0  ?  ? 8.0  ?
entities No No No [9]  ?  ? 8.0  ?
notations No No No [10]  ?  ? 8.0  ?
DOM2 publicId No No 1.0  ?  ? 8.0  ?
systemId No No 1.0  ?  ? 8.0  ?
internalSubset No No 1.0  ?  ? 8.0  ?
Interface Notation
DOM1 publicId No No 1.0  ?  ? No  ?
systemId No No 1.0  ?  ? No  ?
Interface Entity
DOM1 publicId No No 1.0  ?  ? No  ?
systemId No No 1.0  ?  ? No  ?
notationName No No 1.0  ?  ? No  ?
DOM3 inputEncoding No No No  ?  ? No  ?
xmlEncoding No No No  ?  ? No  ?
xmlVersion No No No  ?  ? No  ?
Interface EntityReference
DOM1 (no properties) No No 1.0  ?  ? No  ?
Interface ProcessingInstruction
DOM1 target No No 1.0  ?  ? No  ?
data No No 1.0  ?  ? No  ?
Trident Tasman Gecko WebCore KHTML Presto iCab

HTML

The interfaces found within this section are not mandatory. This section extends the DOM Core API to describe objects and methods specific to HTML documents, and XHTML documents. In general, the functionality needed to manipulate hierarchical document structures, elements, and attributes will be found in the core section; functionality that depends on the specific elements defined in HTML will be found in this section. Elements deprecated since HTML 4.01 are not listed. Some elements and attributes listed here are deprecated in XHTML 1.1. For example, presentation attributes, image maps, frames and targets.

Trident Tasman Gecko WebCore KHTML Presto iCab
Interface HTMLCollection
DOM1 length  ?  ? 1.0  ?  ? 7.0  ?
item()  ?  ? 1.0  ?  ? 7.0  ?
namedItem()  ?  ? 1.0  ?  ? 7.0  ?
Interface HTMLOptionsCollection
DOM2 length  ?  ? 1.0  ?  ?  ?  ?
item()  ?  ? 1.0  ?  ?  ?  ?
namedItem()  ?  ? 1.0  ?  ?  ?  ?
Interface HTMLDocument
DOM1 title 3.0 0 1.0  ?  ? 7.0  ?
referrer 3.0 0 1.0  ?  ? 7.0  ?
domain 4.0 0 1.0  ?  ? 7.0  ?
URL 4.0 0 1.0  ?  ? 7.0  ?
body 4.0 0 1.0  ?  ? 7.0  ?
images 4.0 0 1.0  ?  ? 7.0  ?
applets 4.0 0 1.0  ?  ? 7.0  ?
links 3.0 0 1.0  ?  ? 7.0  ?
forms 3.0 0 1.0  ?  ? 7.0  ?
anchors 3.0 0 1.0  ?  ? 7.0  ?
cookie 3.0 0 1.0  ?  ? 7.0  ?
open() 3.0 0 1.0  ?  ? 7.0  ?
close() 3.0 0 1.0  ?  ? 7.0  ?
write() 3.0 0 1.0  ?  ? 7.0  ?
writeln() 3.0 0 1.0  ?  ? 7.0  ?
getElementsByName()  ?  ? 1.0  ?  ? 7.0  ?
Interface HTMLElement
DOM1 id 4.0 0 1.0  ?  ? 7.0  ?
title 4.0 0 1.0  ?  ? 7.0  ?
lang 4.0 0 1.0  ?  ? 7.0  ?
dir 5.0 0 1.0  ?  ? 7.0  ?
className 4.0 0 1.0  ?  ? 7.0  ?
Interface HTMLHtmlElement
DOM1 version 6.0  ? 1.0  ?  ? No  ?
Interface HTMLHeadElement
DOM1 profile Incorrect  ? 1.0  ?  ? 8.0  ?
Interface HTMLLinkElement
DOM1 disabled 4.0 0 1.0  ?  ? 7.0  ?
charset 4.0 0 1.0  ?  ? 7.0  ?
href Incorrect 0 1.0  ?  ? 7.0  ?
hreflang 4.0 0 1.0  ?  ? 7.0  ?
media 4.0 0 1.0  ?  ? 7.0  ?
rel 4.0 0 1.0  ?  ? 7.0  ?
rev 4.0 0 1.0  ?  ? 7.0  ?
target 4.0 0 1.0  ?  ? 7.0  ?
type 4.0 0 1.0  ?  ? 7.0  ?
Interface HTMLTitleElement
DOM1 text 4.0 0 1.0  ?  ? 7.0  ?
Interface HTMLMetaElement
DOM2 content 4.0 0 1.0  ?  ? 7.0  ?
httpEquiv 4.0 0 1.0  ?  ? 7.0  ?
name 4.0 0 1.0  ?  ? 7.0  ?
scheme 6.0  ? 1.0  ?  ? No  ?
Interface HTMLBaseElement
DOM1 href Incorrect 0 1.0  ?  ? No  ?
target 4.0 0 1.0  ?  ? No  ?
Interface HTMLStyleElement
DOM2 disabled  ?  ? 1.0  ?  ? 7.0  ?
media 4.0 0 1.0  ?  ? 7.0  ?
type 4.0 0 1.0  ?  ? 7.0  ?
Interface HTMLBodyElement
DOM1 aLink 4.0 0 1.0  ?  ? 7.0  ?
background Incorrect 0 1.0  ?  ? 7.0  ?
bgColor 4.0 0 1.0  ?  ? 7.0  ?
link 4.0 0 1.0  ?  ? 7.0  ?
text 4.0 0 1.0  ?  ? 7.0  ?
vLink 4.0 0 1.0  ?  ? 7.0  ?
Interface HTMLFormElement
DOM1 elements 3.0 0 1.0  ?  ? 7.0  ?
length 3.0 0 1.0  ?  ? 7.0  ?
name 3.0 0 1.0  ?  ? 7.0  ?
acceptEncoding  ?  ? 1.0  ?  ? 7.0  ?
action Incorrect 0 1.8  ?  ? 7.0  ?
enctype 4.0 0 1.0  ?  ? 7.0  ?
method 3.0 0 1.0  ?  ? 7.0  ?
target 3.0 0 1.0  ?  ? 7.0  ?
submit() 3.0 0 1.0  ?  ? 7.0  ?
reset() 4.0 0 1.0  ?  ? 7.0  ?
Interface HTMLSelectElement
DOM1 type 4.0 0 1.0  ?  ? 7.0  ?
selectedIndex 3.0 0 1.0  ?  ? 7.0  ?
value 4.0 0 1.0  ?  ? 7.0  ?
length 3.0 0 1.0  ?  ? 7.0  ?
form  ?  ? 1.0  ?  ? 7.0  ?
options 3.0 0 1.0  ?  ? 7.0  ?
disabled 5.0 0 1.0  ?  ? 7.0  ?
multiple 5.0 0 1.0  ?  ? 7.0  ?
name 3.0 0 1.0  ?  ? 7.0  ?
size 4.0 0 1.0  ?  ? 7.0  ?
tabIndex  ?  ? 1.0  ?  ? 7.0  ?
add()  ?  ? 1.0  ?  ? 7.0  ?
remove()  ?  ? 1.0  ?  ? 7.0  ?
blur() 3.0 0 1.0  ?  ? 7.0  ?
focus() 3.0 0 1.0  ?  ? 7.0  ?
Interface HTMLOptGroupElement
DOM1 disabled  ?  ? 1.0  ?  ? No  ?
label No 0 1.0  ?  ? No  ?
Interface HTMLOptionElement
DOM1 form 4.0 0 1.0  ?  ? 7.0  ?
defaultSelected 4.0 0 1.0  ?  ? 7.0  ?
text 4.0 0 1.0  ?  ? 7.0  ?
index  ?  ? 1.0  ?  ? 7.0  ?
disabled  ?  ? 1.0  ?  ? 7.0  ?
label 6.0 0 1.0  ?  ? No  ?
selected 4.0 0