On Wed, Dec 12, 2012 at 11:19 AM, David Bruant <bruan...@gmail.com> wrote:
> A good question by Anne van Kesteren [1] followed by good remarks by Boris > Zbarsky [2][3] made me try a little something [4][5]. > The WindowProxy object returned as the 'contentWindow' property of iframes > never changes; whatever you do when changing the @src, always the same > object is returned. However, based on whether the @src is changed, the > WindowProxy proxies to a different Window instance. > I bumped into this myself just recently while attempting to implement virtualized navigable iframes in Caja — I need to emulate exactly this behavior. > [...] I wish to point out that apparently iframe.contentWindow does break > quite a lot of "eternal invariants" [7] which isn't really good news, > because it questions their eternity. > Indeed! > Among alternatives I'm thinking of: > * define a new type of proxies for which the target can be changed (either > only as a spec device of as an actual object that can be instantiated in > scripts) > * change the behavior of WindowProxy instances when it comes to doing > things that would commit them to eternal invariants to throw instead of > forwarding. This solution may still be possible, because it's unlikely that > Object.defineProperty is widely used in web content today. But this change > should happen pretty fast before content relies on it. > The best option I see at the moment would be that a WindowProxy refuses to commit, but a Window does. That is, code operating on 'window' within the iframe can still Object.defineProperty, but from the outside every property of Window appears to be configurable. This is what I have implemented in my current draft. On the other hand, it seems that in browsers either 'window' is also the same (!) proxy, or === invariants are broken, or the WindowProxy is acting as a membrane: > f.contentWindow === f.contentWindow.window true This would seem to prohibit the distinction I propose.
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss