Skip to content

Commit

Permalink
Scorch the earth and retreat on readyState interactive! Close gh-907.
Browse files Browse the repository at this point in the history
  • Loading branch information
mikesherov authored and dmethvin committed Aug 24, 2012
1 parent 10901f7 commit a9c2a9b
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 137 deletions.
4 changes: 2 additions & 2 deletions src/core.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -831,9 +831,9 @@ jQuery.ready.promise = function( obj ) {
readyList = jQuery.Deferred(); readyList = jQuery.Deferred();


// Catch cases where $(document).ready() is called after the browser event has already occurred. // 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 // 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 // Handle it asynchronously to allow scripts the opportunity to delay ready
setTimeout( jQuery.ready, 1 ); setTimeout( jQuery.ready, 1 );


Expand Down
30 changes: 0 additions & 30 deletions test/data/event/asyncReady.html

This file was deleted.

6 changes: 0 additions & 6 deletions test/data/event/longLoad.php

This file was deleted.

40 changes: 0 additions & 40 deletions test/data/event/partialLoadReady.php

This file was deleted.

26 changes: 0 additions & 26 deletions test/data/event/syncReadyLongLoad.html

This file was deleted.

44 changes: 11 additions & 33 deletions test/unit/event.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -2882,39 +2882,17 @@ test("fixHooks extensions", function() {
jQuery.event.fixHooks.click = saved; 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 // need PHP here to make the incepted IFRAME hang
// 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
if ( hasPHP ) { 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 ) { testIframeWithCallback( "jQuery.ready synchronous load with long loading subresources", "event/syncReady.html", function( isOk ) {
expect(1); expect(1);
ok( isOk, "jQuery loaded synchronously fires ready when the DOM can truly be interacted with" ); 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(){ (function(){
Expand Down Expand Up @@ -2994,22 +2972,22 @@ test("change handler should be detached from element", function() {
expect( 2 ); expect( 2 );


var $fixture = jQuery( "<input type='text' id='change-ie-leak' />" ).appendTo( "body" ); var $fixture = jQuery( "<input type='text' id='change-ie-leak' />" ).appendTo( "body" );

var originRemoveEvent = jQuery.removeEvent; var originRemoveEvent = jQuery.removeEvent;

var wrapperRemoveEvent = function(elem, type, handle){ var wrapperRemoveEvent = function(elem, type, handle){
equal("change", type, "Event handler for 'change' event should be removed"); 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"); equal("change-ie-leak", jQuery(elem).attr("id"), "Event handler for 'change' event should be removed from appropriate element");
originRemoveEvent(elem, type, handle); originRemoveEvent(elem, type, handle);
}; };

jQuery.removeEvent = wrapperRemoveEvent ; jQuery.removeEvent = wrapperRemoveEvent ;

$fixture.bind( "change", function( event ) {}); $fixture.bind( "change", function( event ) {});
$fixture.unbind( "change" ); $fixture.unbind( "change" );

$fixture.remove(); $fixture.remove();

jQuery.removeEvent = originRemoveEvent; jQuery.removeEvent = originRemoveEvent;
}); });


Expand Down

0 comments on commit a9c2a9b

Please sign in to comment.