mirror of
https://github.com/jquery/jquery.git
synced 2025-01-10 18:24:24 +00:00
Fix #13393. Avoid IE9 activeElement of death.
This commit is contained in:
parent
f1ba486ee3
commit
85fc5878b3
10
src/event.js
10
src/event.js
@ -11,6 +11,12 @@ function returnFalse() {
|
||||
return false;
|
||||
}
|
||||
|
||||
function safeActiveElement() {
|
||||
try {
|
||||
return document.activeElement;
|
||||
} catch ( err ) { }
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper functions for managing events -- not part of the public interface.
|
||||
* Props to Dean Edwards' addEvent library for many of the ideas.
|
||||
@ -522,7 +528,7 @@ jQuery.event = {
|
||||
focus: {
|
||||
// Fire native event if possible so blur/focus sequence is correct
|
||||
trigger: function() {
|
||||
if ( this !== document.activeElement && this.focus ) {
|
||||
if ( this !== safeActiveElement() && this.focus ) {
|
||||
this.focus();
|
||||
return false;
|
||||
}
|
||||
@ -531,7 +537,7 @@ jQuery.event = {
|
||||
},
|
||||
blur: {
|
||||
trigger: function() {
|
||||
if ( this === document.activeElement && this.blur ) {
|
||||
if ( this === safeActiveElement() && this.blur ) {
|
||||
this.blur();
|
||||
return false;
|
||||
}
|
||||
|
16
test/data/event/focusElem.html
Normal file
16
test/data/event/focusElem.html
Normal file
@ -0,0 +1,16 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<title>.focus() (activeElement access #13393)</title>
|
||||
|
||||
<script src="../../jquery.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<a href="#" id="frame-link"></a>
|
||||
<script>
|
||||
jQuery("#frame-link").focus();
|
||||
window.parent.iframeCallback( true );
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -2416,6 +2416,11 @@ testIframeWithCallback( "jQuery.ready promise", "event/promiseReady.html", funct
|
||||
ok( isOk, "$.when( $.ready ) works" );
|
||||
});
|
||||
|
||||
testIframeWithCallback( "Focusing iframe element", "event/focusElem.html", function( isOk ) {
|
||||
expect(1);
|
||||
ok( isOk, "Focused an element in an iframe" );
|
||||
});
|
||||
|
||||
// need PHP here to make the incepted IFRAME hang
|
||||
if ( hasPHP ) {
|
||||
testIframeWithCallback( "jQuery.ready synchronous load with long loading subresources", "event/syncReady.html", function( isOk ) {
|
||||
|
Loading…
Reference in New Issue
Block a user