On 12/27/2012 12:18 PM, Boris Zbarsky wrote:
We have a bunch of chrome and extension code that does things like "instanceof
HTMLAnchorElement" (and likewise with other DOM interfaces).
The problem is that per WebIDL spec and general ECMAScript sanity this
shouldn't work: instanceof goes up the proto chain looking for the thing on the
right as a constructor, and chrome's HTMLAnchorElement is not on the proto
chain of web page elements.
The arguably "right" way to do the "el instanceof HTMLAnchorElement" test is:
el instanceof el.ownerDocument.defaultView.HTMLAnchorElement
Needless to say this sucks.
And doesn't work for data documents which don't have defaultView
For now we're violating the spec in a few ways and hacking things like the
above to work, but that involves preserving the nsIDOMHTML* interfaces,
which we'd like to get rid of to reduce memory usage and whatnot.
So the question is how we should make the above work sanely. I've brought up
the problem a few times on public-script-coord and whatnot, but there
seems to not be much interest in solving it, so I think we should take the next
step and propose a specific solution that we've already implemented.
One option is to model this on the Array.isArray method ES has. We'd have to
figure out how to name all the methods.
You mean something like Node.is(element, "HTMLAnchorElement"); ?
Other ideas?
No matter what we'd then need to migrate our chrome and extensions to the new
setup, so I'd rather not change this more than once. Especially for
extensions.
-Boris
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform