]> source.dussan.org Git - jquery.git/commitdiff
Scorch the earth and retreat on readyState interactive! Close gh-907.
authorMike Sherov <mike.sherov@gmail.com>
Thu, 23 Aug 2012 21:46:12 +0000 (17:46 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Fri, 24 Aug 2012 00:28:22 +0000 (20:28 -0400)
src/core.js
test/data/event/asyncReady.html [deleted file]
test/data/event/longLoad.php [deleted file]
test/data/event/partialLoadReady.php [deleted file]
test/data/event/syncReadyLongLoad.html [deleted file]
test/unit/event.js

index 4652c5ad7d547923f831565fb1d206a1d9015f19..916e7ad8d7e80d990a9f427e87ac0d6c8fa93d9a 100644 (file)
@@ -831,9 +831,9 @@ jQuery.ready.promise = function( obj ) {
                readyList = jQuery.Deferred();
 
                // Catch cases where $(document).ready() is called after the browser event has already occurred.
-               // IE10 and lower don't handle "interactive" properly... use a weak inference to detect it
+               // 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.attachEvent ? document.readyState === "complete" : document.readyState !== "loading" ) {
+               if ( document.readyState === "complete" ) {
                        // Handle it asynchronously to allow scripts the opportunity to delay ready
                        setTimeout( jQuery.ready, 1 );
 
diff --git a/test/data/event/asyncReady.html b/test/data/event/asyncReady.html
deleted file mode 100644 (file)
index 48a967a..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<!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 jQuery ticket #10067</title>
-<script type="text/javascript">
-setTimeout(function() {
-       el = document.createElement("script");
-       el.type = "text/javascript";
-       el.onload = function() {
-               jQuery( document ).ready(function() {
-                       window.parent.iframeCallback( jQuery('#container').length === 1 );
-               });
-       }
-       document.getElementsByTagName("head")[ 0 ].appendChild( el );
-       el.src = "../../../dist/jquery.js";
-}, 1000 );
-</script>
-</head>
-<body>
-
-<!-- external resources that come before elements trick
-oldIE into thinking the dom is ready, but it's not... -->
-<script type="text/javascript" src="longLoadScript.php?sleep=1"></script>
-<div id="container" style="height: 300px"></div>
-
-<!-- long loading iframe -->
-<iframe src="longLoad.php?sleep=15&return=false" style="width: 1px; height: 1px"></iframe>
-</body>
-</html>
diff --git a/test/data/event/longLoad.php b/test/data/event/longLoad.php
deleted file mode 100644 (file)
index ba1d43f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-sleep((int)$_GET['sleep']);
-?>
-<script type="text/javascript">
-window.parent.parent.iframeCallback(<?php echo $_GET['return'];?>);
-</script>
\ No newline at end of file
diff --git a/test/data/event/partialLoadReady.php b/test/data/event/partialLoadReady.php
deleted file mode 100644 (file)
index 1a93b0b..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-//try very hard to disable output buffering
-//@ini_set("output_buffering", 0);
-//@apache_setenv("no-gzip", 1);
-//@ini_set("zlib.output_compression", 0);
-ob_start();
-?>
-
-<!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 jQuery ticket #12282</title>
-</head>
-<body>
-
-<h1>TEST</h1>
-<script type="text/javascript" src="../../../dist/jquery.js"></script>
-<script type="text/javascript">
-jQuery( document ).ready(function() {
-       window.parent.iframeCallback( jQuery('#container').length === 1 );
-});
-</script>
-
-<?php
-//send the top of the document without sending the bottom portion
-echo str_repeat(" ", 1024 * 8), "\n";
-ob_flush();
-?>
-
-<h2>Sleeping for 1 seconds (simulating server side process)</h2>
-
-<?php
-//sleep for a bit, simulating a server side process
-sleep(1);
-?>
-
-<div id="container">ready</h2>
-</body>
-</html>
\ No newline at end of file
diff --git a/test/data/event/syncReadyLongLoad.html b/test/data/event/syncReadyLongLoad.html
deleted file mode 100644 (file)
index 83f2859..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<!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 jQuery ticket #10067</title>
-<script type="text/javascript" src="../../../dist/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>
-
-<!-- long loading iframe -->
-<iframe src="longLoad.php?sleep=10&return=false" style="width: 1px; height: 1px"></iframe>
-</body>
-</html>
index f58eb59e60dc0994478992d0ce6365c78cac63e8..74cf1b9b704f9923ebb3af52108dbd9a92c04110 100644 (file)
@@ -2882,39 +2882,17 @@ test("fixHooks extensions", function() {
        jQuery.event.fixHooks.click = saved;
 });
 
+testIframeWithCallback( "jQuery.ready promise", "event/promiseReady.html", function( isOk ) {
+       expect(1);
+       ok( isOk, "$.when( $.ready ) works" );
+});
 
-// async loaded tests expect jQuery to be loaded as a single file
-// if we're not doing PHP concat, then we fall back to document.write
-// which breaks order of execution on async loaded files
-// also need PHP to make the incepted IFRAME hang
+// need PHP here to make the incepted IFRAME hang
 if ( hasPHP ) {
-       testIframeWithCallback( "jQuery.ready promise", "event/promiseReady.html", function( isOk ) {
-               expect(1);
-               ok( isOk, "$.when( $.ready ) works" );
-       });
-
        testIframeWithCallback( "jQuery.ready synchronous load with long loading subresources", "event/syncReady.html", function( isOk ) {
                expect(1);
                ok( isOk, "jQuery loaded synchronously fires ready when the DOM can truly be interacted with" );
        });
-
-       testIframeWithCallback( "jQuery.ready synchronous load with partially loaded page", "event/partialLoadReady.php", function( isOk ) {
-               expect(1);
-               ok( isOk, "jQuery loaded synchronously fires ready when the DOM can truly be interacted with" );
-       });
-
-       // allIE needs all subresources and full page to be loaded before it can gaurantee the document is truly ready to be interacted with
-       if( !document.attachEvent ) {
-               testIframeWithCallback( "jQuery.ready synchronous load with long loading iframe", "event/syncReadyLongLoad.html", function( isOk ) {
-                       expect(1);
-                       ok( isOk, "jQuery loaded synchronously fires ready before all sub-resources are loaded" );
-               });
-
-               testIframeWithCallback( "jQuery.ready asynchronous load with long loading iframe", "event/asyncReady.html", function( isOk ) {
-                       expect(1);
-                       ok( isOk, "jQuery loaded asynchronously fires ready before all sub-resources are loaded" );
-               });
-       }
 }
 
 (function(){
@@ -2994,22 +2972,22 @@ test("change handler should be detached from element", function() {
        expect( 2 );
 
        var $fixture = jQuery( "<input type='text' id='change-ie-leak' />" ).appendTo( "body" );
-       
+
        var originRemoveEvent =  jQuery.removeEvent;
-       
+
        var wrapperRemoveEvent =  function(elem, type, handle){
                equal("change", type, "Event handler for 'change' event should be removed");
                equal("change-ie-leak", jQuery(elem).attr("id"), "Event handler for 'change' event should be removed from appropriate element");
                originRemoveEvent(elem, type, handle);
        };
-       
+
        jQuery.removeEvent = wrapperRemoveEvent ;
-       
+
        $fixture.bind( "change", function( event ) {});
        $fixture.unbind( "change" );
-       
+
        $fixture.remove();
-       
+
        jQuery.removeEvent = originRemoveEvent;
 });