[whatwg] relationship between Document and HTMLDocument
David Flanagan
dflanagan at mozilla.com
Tue Aug 9 13:10:30 PDT 2011
On 8/9/11 12:53 PM, Ian Hickson wrote:
> On Tue, 9 Aug 2011, David Flanagan wrote:
>> �3.1.1 includes the following:
>>
>> interface HTMLDocument { ... };
>> Document implements HTMLDocument;
>>
>> If I'm reading WebIDL correctly, this means that this expression must be
>> false:
>>
>> document instanceof HTMLDocument
>>
>> And also that this code will have no visible effect on the document object:
>>
>> HTMLDocument.prototype.foo = function() { ... }
>>
>> Furthermore, if I want to monkeypatch a method like getElementsByName() that
>> is defined by HTML, the correct place to do that is on Document.prototype, not
>> HTMLDocument.prototype
>>
>> Currently, of course (tested in FF, Chrome and Safari), browsers treat
>> HTMLDocument as if it were declared like this:
>>
>> interface HTMLDocument : Document { ... };
>>
>> This means that in the current generation of browsers:
>>
>> document instanceof HTMLDocument // => true
>> HTMLDocument.prototype.foo = function() {...} // affects document
>> Document.prototype.getElementsByName // undefined; can't monkeypatch it
>>
>> I would guess (but have no data) that web compatibility will make these
>> behaviors difficult to change.
> Possibly. I think an alternative is to make the HTML spec just add all the
> members to Document, and then define window.HTMLDocument as returning the
> Document interface object. This would make instanceof and "monkeypatching"
> work as today.
>
So you'd declare HTMLDocument with the [NoInterfaceObject] extended
attribute and then add attribute HTMLDocument to the Window interface?
That changes HTMLDocument from non-enumerable to enumerable, but that
seems unlikely to be a compatibility issue. That works for me, I think.
David
More information about the whatwg
mailing list