javascript - Why is window not identical to window.self in Internet Explorer? -
there's convoluted backstory involving how came across this, why self property not equal window itself?
in safari , firefox , friends, results i'd expect:
> window == window.self true > window === window.self true the same isn't true in internet explorer, though:
>> window == window.self true >> window === window.self false can account inconsistency? self property of window object pointing? casts equality, more vexing.
that's not all, window!==window.window!
i believe we're seeing here difference between ‘inner window’ , ‘outer window’ objects. other browsers have these (eg. moz); they're typically used present different view of window inside , outside own code.
the inner window holds global variables , document-specific members. outer window accessible [cross-frame-] scripting via window-references frames[n], parent, opener, , apparently self. bound owner viewport (browser window/frame), eg. when navigate iframe new document, parent document still sees same-identity window object in iframe.
in sensible browser object model design there separate objects this, when javascript thrown netscape there little consideration elegance, resulting in , many other interfaces there overload (form element called submit, anyone?).
so compatibility, split window has continue appear single object scripts though isn't underneath. in ie, mask slips: seems saying window gets inner window, , there's no hack make === against outer window.
eta: come think of it, there's (poor) justification this. ecmascript spec, not written multiple global contexts in mind, defines window, , unbound version of this, retrieving global variable scope object, inner window.
the other properties, being part of dom/bom, not within scope of ecma spec, can return different (and must, sake of cross-frame scripting).
Comments
Post a Comment