mirror of
https://github.com/jquery/jquery.git
synced 2024-10-05 11:34:18 +00:00
Scorch the earth and retreat on readyState interactive! Close gh-907.
This commit is contained in:
parent
10901f7d9f
commit
a9c2a9bf61
@ -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 );
|
||||||
|
|
||||||
|
@ -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>
|
|
@ -1,6 +0,0 @@
|
|||||||
<?php
|
|
||||||
sleep((int)$_GET['sleep']);
|
|
||||||
?>
|
|
||||||
<script type="text/javascript">
|
|
||||||
window.parent.parent.iframeCallback(<?php echo $_GET['return'];?>);
|
|
||||||
</script>
|
|
@ -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>
|
|
@ -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>
|
|
@ -2882,39 +2882,17 @@ test("fixHooks extensions", function() {
|
|||||||
jQuery.event.fixHooks.click = saved;
|
jQuery.event.fixHooks.click = saved;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// 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
|
|
||||||
if ( hasPHP ) {
|
|
||||||
testIframeWithCallback( "jQuery.ready promise", "event/promiseReady.html", function( isOk ) {
|
testIframeWithCallback( "jQuery.ready promise", "event/promiseReady.html", function( isOk ) {
|
||||||
expect(1);
|
expect(1);
|
||||||
ok( isOk, "$.when( $.ready ) works" );
|
ok( isOk, "$.when( $.ready ) works" );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 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 ) {
|
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(){
|
||||||
|
Loading…
Reference in New Issue
Block a user