On Feb 17, 2009, at 4:52 PM, Mark Miller wrote:
On Tue, Feb 17, 2009 at 3:02 PM, Ian Hickson <[email protected]> wrote:
Here are some demos. 001 is a control test. If it says "false", you
have a
violation of ES, and are likely incompatible with legacy content. If
it
says "true", then test 002. If 002 says "false", then ES is being
violated
in some way. If 002 doesn't say anything, then code is being blocked
when
the global object doesn't match the current document; Mozilla,
Apple, and
Opera have all told me not to do that for performance reasons. If it
says
false, then test 005 -- if that says true before and false after,
then the
browser is probably incompatible with legacy content.
http://damowmow.com/playground/demos/global-object/001.html
http://damowmow.com/playground/demos/global-object/002.html
http://damowmow.com/playground/demos/global-object/005.html
FF = Firefox 3.0.6
WK = WebKit nightly for Safari Version 3.2.1 (5525.27.1)
CR = Chrome 1.0.154.48
OP = Opera 9.62
IE = IE 6.0.2900
T = true
F = false
B = apparently blocked, since nothing happened
(view in a fixed width font)
test 1 test 2 before after test 5 before after
FF T T B T B
WK T T F T T
CR T T T T B
OP T T T T F
IE T T B F B
Since cross-browser legacy content must work across this range of
behaviors, it seems there is not any one legacy behavior to codify.
There's really two basic requirements that have to be met here:
1) For compatibility, a reference to the Window object (which acts as
the global object of a frame or window) must act as a persistent
handle for code outside the frame/window and must continue to reflect
the current contents of the given frame/window even if it is navigated
to a new document.
2) For security, it must not be possible for a function saved from a
an older document in a given Window to see variables created when some
other document is current, if those documents are not same-origin.
(The same applies in reverse - code associated with new documents must
not see old variable bindings).
In addition, there are two constraints strongly suggested by
performance considerations:
3) Variable lookup via the scope chain shouldn't have to do a same-
origin check for every access, as that is too slow compared to the
cost of variable lookup alone.
4) JavaScript-to-JavaScript function calls shouldn't have to do a
check to see if the function being called is associated with a non-
current document - doing this at every JS-to-JS call boundary is quite
expensive.
Given these constraints, the most natural solution is a "split window"
type approach, which both Gecko and WebKit implement.
Regards,
Maciej
_______________________________________________
Es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss