- From: Travis Leithead <travis.leithead@microsoft.com>
- Date: Wed, 15 Aug 2012 18:25:13 +0000
- To: Brendan Eich <brendan@mozilla.com>, Cameron McCormack <cam@mcc.id.au>
- CC: Boris Zbarsky <bzbarsky@mit.edu>, "public-script-coord@w3.org" <public-script-coord@w3.org>, "es-discuss@mozilla.org" <es-discuss@mozilla.org>
> From: Brendan Eich [mailto:brendan@mozilla.com] > > Cameron McCormack wrote: > > Brendan Eich: > >> As bz and others point out, the object detection w/ var pattern can > >> arise for operations, e.g. for requestAnimationFrame, using the same > >> > >> var requestAnimationFrame = window.mozRequestAnimationFrame || > ... > >> || window.requestAnimationFrame; > >> > >> pattern. So WebIDL operations (JS methods) on the global would be > >> promoted to "own" too. They'd be configurable, if I recall correctly, > >> and either writable or replaceable. Do I have that right? > > > > OK. So one thing that I think has been pointed out is that moving > > properties for operations on to window makes it harder to monkeypatch > > addEventListener and friends. Indeed, and this is a scenario that we [IE] care deeply about given that we have tools that use this behavior extensively. > > We *could*, if we thought it was important, have the properties on > > window forward on to the ones from the prototype. > > Less magic if we can avoid it. +1 > > 3. The only writable IDL attributes on Window are: > > > > attribute DOMString name; > > attribute DOMString status; > > attribute WindowProxy? opener; > > > > and all of the event handler attributes like "onclick". How do these > > need to behave if script blithely tries to use variables of the same > > name? With this: > > > > <script> > > alert([window.status, typeof window.status]); > > window.status = "hello"; > > alert([window.status, typeof window.status]); </script> <script> > > var status; > > alert([window.status, typeof window.status]); > > status = 1; > > alert([window.status, typeof window.status]); </script> > > > > Gecko and Opera alert: > > > > ,string > > hello,string > > ,undefined > > 1,number > > Yes, this is more lossage compared to historical norms that WebKit-based > browsers still uphold. > > The lack of a var initialiser means that the (historically own) status accessor > must have its getter or setter invoked. 'var' doesn't replace an existing own > property in any scenario, historical or ES5+erratum-fix. > > > while Chrome and Safari alert: > > > > ,string > > hello,string > > hello,string > > 1,string > > > > which seems to indicate that they're setting the IDL attribute. > > Did you try IE8, 9 and 10? I suspect they match but can't test. IE9/10 match Gecko/Opera in the above example. > > With this: > > > > <body onerror="alert('exception')"> > > <script> > > alert([String(window.onclick), typeof window.onclick)]); </script> > > <script> > > var onclick = 1; > > alert([String(window.onclick), typeof window.onclick]); </script> > > > > Gecko, Opera and Chrome alert: > > > > null,object > > 1,number > > > > which could mean shadowing or treating "onclick" as IDL type "any" and > > treating non-Function values as null, while Safari alerts: > > > > null,object > > null,object > > > > which looks like it's invoking the setter but ignoring the assignment > > of a non-Function value. > > Seems a Safari deviation. IE9/10 also mimic Gecko/Opera/Chrome above. +1 on Safari deviation.
Received on Wednesday, 15 August 2012 18:25:51 UTC