diff options
Diffstat (limited to 'ui/safe-active-element.js')
-rw-r--r-- | ui/safe-active-element.js | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/ui/safe-active-element.js b/ui/safe-active-element.js new file mode 100644 index 000000000..4d04add5f --- /dev/null +++ b/ui/safe-active-element.js @@ -0,0 +1,40 @@ +( function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "jquery", "./version" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +} ( function( $ ) { +return $.ui.safeActiveElement = function( document ) { + var activeElement; + + // Support: IE 9 only + // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe> + try { + activeElement = document.activeElement; + } catch ( error ) { + activeElement = document.body; + } + + // Support: IE 9 - 11 only + // IE may return null instead of an element + // Interestingly, this only seems to occur when NOT in an iframe + if ( !activeElement ) { + activeElement = document.body; + } + + // Support: IE 11 only + // IE11 returns a seemingly empty object in some cases when accessing + // document.activeElement from an <iframe> + if ( !activeElement.nodeName ) { + activeElement = document.body; + } + + return activeElement; +}; + +} ) ); |