Multiple globals and direct/indirect eval
bruant at enseirb-matmeca.fr
Fri Mar 4 05:53:29 PST 2011
[Adding WhatWG and public-script-coord (WebIDL) to the discussion.
Discussion is ongoing :
- Start of thread :
- Strawman by Dave Herman:
I am wondering if ECMAScript is the right "place" to standardize this.
Web browsers face multiple global object via a mecanism which isn't
under the ECMAScript scope (namely HTMLIFrameElements
which aren't even DOM but HTMLDOM-specific).
Other ECMAScript implementations could face the issue of having several
globals but with other non-HTMLDOM use cases. For that reason, I think
it'd be dangerous for ECMAScript to standardize anything on the topic.
To answer Jeff Walden's final questions, in my opinion, WebIDL would be
a way better place to standardize this. ECMAScript could at most provide
guidelines for ECMAScript implementors who would have to face this issue
(gathering feedback and experience from implementations).
Le 03/03/2011 23:39, Jeff Walden a écrit :
> A few months back I noticed an interesting interaction between how
> direct eval is defined and multiple globals. What happens if, in one
> global, you call an eval from another global as if it were a direct eval?
> var indirect = otherGlobal.eval;
> eval = indirect;
> print(eval("this") === this);
> print(indirect("this") === this);
> Standards currently don't say what should happen here because it's
> multiple globals, so what should this do? IE9 and Opera print false
> both times for this. Firefox prints true, then false -- but only if
> the global and otherGlobal are from the same origin (so on pages with
> the same scheme/host/port, more or less). If they're from different
> origins (but have set document.domain to the same value) Firefox too
> prints false. Chrome and Safari throw an EvalError calling another
> window's eval (for both "direct" and indirect calls) without that
> window as |this| for the call.
> The Chrome/Safari behavior would resurrect the vestigial EvalError, so
> I don't think it makes sense. It also contradicts the specification
> of the steps in the definition of the eval function. Firefox's
> behavior is inconsistent and seems not amenable to host-agnostic
> specification as ECMA would require. Thus we are left with the
> IE9/Opera behavior, which seems sensible and natural to me: an eval
> function should always act in the context of the global from which it
> What needs to be done to standardize this behavior? And more
> generally, what needs to be done to begin standardizing multiple
> globals in ECMAScript, including issues like this one?
> es-discuss mailing list
> es-discuss at mozilla.org
More information about the es-discuss