aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/ready.js8
-rw-r--r--test/data/event/interactiveReady.html23
-rw-r--r--test/unit/event.js12
3 files changed, 39 insertions, 4 deletions
diff --git a/src/core/ready.js b/src/core/ready.js
index 7a7ef5869..73c3d706a 100644
--- a/src/core/ready.js
+++ b/src/core/ready.js
@@ -70,10 +70,10 @@ jQuery.ready.promise = function( obj ) {
// Catch cases where $(document).ready() is called
// after the browser event has already occurred.
- // We once tried to use readyState "interactive" here,
- // but it caused issues like the one
- // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
- if ( document.readyState === "complete" ) {
+ // Support: IE9-10 only
+ // Older IE sometimes signals "interactive" too soon
+ if ( document.readyState === "complete" ||
+ ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
window.setTimeout( jQuery.ready );
diff --git a/test/data/event/interactiveReady.html b/test/data/event/interactiveReady.html
new file mode 100644
index 000000000..77b37104d
--- /dev/null
+++ b/test/data/event/interactiveReady.html
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<title>Test case for gh-2100</title>
+<script src="../../jquery.js"></script>
+</head>
+<body>
+
+<script type="text/javascript">
+jQuery( document ).ready(function () {
+ window.parent.iframeCallback( jQuery("#container").length === 1 );
+});
+</script>
+
+<!-- external resources that come before elements trick
+ oldIE into thinking the dom is ready, but it's not...
+ leaving this check here for future trailblazers to attempt
+ fixing this...-->
+<script type="text/javascript" src="../longLoadScript.php?sleep=1"></script>
+<div id="container" style="height: 300px"></div>
+</body>
+</html>
diff --git a/test/unit/event.js b/test/unit/event.js
index ebaf42f6b..479f805db 100644
--- a/test/unit/event.js
+++ b/test/unit/event.js
@@ -2518,6 +2518,18 @@ testIframeWithCallback(
}
);
+// need PHP here to make the incepted IFRAME hang
+if ( hasPHP ) {
+ testIframeWithCallback(
+ "jQuery.ready uses interactive",
+ "event/interactiveReady.html",
+ function( isOk, assert ) {
+ assert.expect( 1 );
+ assert.ok( isOk, "jQuery fires ready when the DOM can truly be interacted with" );
+ }
+ );
+}
+
testIframeWithCallback(
"Focusing iframe element",
"event/focusElem.html",