if ( window.getComputedStyle ) {
getStyles = function( elem ) {
- return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
+ // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+ // IE throws on elements created in popups
+ // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+ if ( elem.ownerDocument.defaultView.opener ) {
+ return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
+ }
+
+ return window.getComputedStyle( elem, null );
};
curCSS = function( elem, name, computed ) {
});
}
})();
+
+test( "Do not throw on frame elements from css method (#15098)", 1, function() {
+ var frameWin, frameDoc,
+ frameElement = document.createElement( "iframe" ),
+ frameWrapDiv = document.createElement( "div" );
+
+ frameWrapDiv.appendChild( frameElement );
+ document.body.appendChild( frameWrapDiv );
+ frameWin = frameElement.contentWindow;
+ frameDoc = frameWin.document;
+ frameDoc.open();
+ frameDoc.write( "<!doctype html><html><body><div>Hi</div></body></html>" );
+ frameDoc.close();
+
+ frameWrapDiv.style.display = "none";
+
+ try {
+ jQuery( frameDoc.body ).css( "direction" );
+ ok( true, "It didn't throw" );
+ } catch ( _ ) {
+ ok( false, "It did throw" );
+ }
+});
}