Le 31/01/2013 16:10, François REMY a écrit :
Hi.
I must admit I didn't follow the whole thread about native element
proxyfication but when I left the consensus was that the native element should
not be proxied (ie: it would not work like Object.create(...) do not work for
them).
Just to clarify, both for Object.create and proxy, your "does not work"
means "cannot be put in the DOM tree". The output object still behaves
as expected from an ECMAScript point of view.
It remain possible to do wrappedNode1.appendChild(wrappedNode2) by
unwrapping both wrappedNode under the hood.
I've however a compelling use case that may make some of us rethink the
situation.
Let's say I want to implement a polyfill for MapEvent whose definition is as
follows:
interface MapEvent : Event {
getter any item(DOMString name);
}
Out of curiosity, where does MapEvent come from? I can't remember having
read about it on any spec and Google isn't helping.
As a side note, I hope this is not a new API, because such getters are
particularly bad taste. I remember it generated some issues with
HTMLCollection. Maybe something about making it inherit from Array and
static analysis on websites.
I think such a getter notation exists in WebIDL to formalize scars from
the past (like HTMLCollection) rather than to be used in new APIs
For this kind of API, I largely prefer the CustomEvent approach where
the (unique!) "detail" field is by-spec expected to be a "go crazy" type
of field. The "detail" attribute also doesn't collide with any existing
field; in the MapEvent case, a getter could shadow an inherited property.
In case of no-proxy-for-native-objects, I've no way to do it properly because
implementing 'getter' requires me to use a Proxy but having a functional event will force
me to use a natively-branded element (like document.createEvent("CustomEvent"))
and changes its prototype chain to match my needs.
The conclusion I was personally at was that every single API will have
to decide how it behaves with proxies. We've seen previously that
proxies in appendChild were a no-go because browsers traverse the DOM
tree for selector matching and putting proxies in the tree would reveal
how selector matching is performed, thus ruining hope of making it parallel.
However, off top of my head, I don't see a main restriction to call
.dispatch with a proxied event as argument. I'm not enough expert of
this topic; people who are in how the APIs are used and implemented will
better tell whether it's appropriate to accept a proxy.
I'll post to public-script-coord to talk about that.
David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss