},
// Evaluates a script in a global context
- globalEval: function( code, context ) {
- context = context || document;
- var script = context.createElement( "script" );
-
- script.text = code;
- context.head.appendChild( script ).parentNode.removeChild( script );
+ globalEval: function( code ) {
+ var script,
+ indirect = eval;
+
+ code = jQuery.trim( code );
+
+ if ( code ) {
+ // If the code includes a valid, prologue position
+ // strict mode pragma, execute code by injecting a
+ // script tag into the document.
+ if ( code.indexOf("use strict") === 1 ) {
+ script = document.createElement("script");
+ script.text = code;
+ document.head.appendChild( script ).parentNode.removeChild( script );
+ } else {
+ // Otherwise, avoid the DOM node creation, insertion
+ // and removal by using an indirect global eval
+ indirect( code );
+ }
+ }
},
// Convert dashed to camelCase; used by the css and data modules
--- /dev/null
+<?php
+sleep((int)$_GET['sleep']);
+header('Content-type: text/javascript');
+?>
\ No newline at end of file
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>
+<script type="text/javascript" src="longLoadScript.php?sleep=1"></script>
<div id="container" style="height: 300px"></div>
</body>
</html>
+++ /dev/null
-<?php
-sleep((int)$_GET['sleep']);
-header('Content-type: text/javascript');
-?>
\ No newline at end of file
jQuery.ajax( {
url: "data/badjson.js",
dataType: "script",
- throws: true
- } );
- } );
+ throws: true,
+ // Global events get confused by the exception
+ global: false,
+ success: function() {
+ ok( false, "Success." );
+ },
+ error: function() {
+ ok( false, "Error." );
+ }
+ });
+ });
jQuery.each( [ "method", "type" ], function( _, globalOption ) {
function request( assert, option ) {
assert.equal( window.strictEvalTest, 1, "Test variable declarations are global (strict mode)" );
} );
-QUnit.test( "globalEval execution after script injection (#7862)", function( assert ) {
- assert.expect( 1 );
-
- var now,
- script = document.createElement( "script" );
-
- script.src = "data/longLoadScript.php?sleep=2";
-
- now = jQuery.now();
- document.body.appendChild( script );
-
- jQuery.globalEval( "var strictEvalTest = " + jQuery.now() + ";" );
- assert.ok( window.strictEvalTest - now < 500, "Code executed synchronously" );
-} );
-
// This is not run in AMD mode
if ( jQuery.noConflict ) {
QUnit.test( "noConflict", function( assert ) {
assert.strictEqual( jQuery( "<p/>" ).appendTo( "<div/>" ).end().length, jQuery( "<p>test</p>" ).appendTo( "<div/>" ).end().length, "Elements created with createElement and with createDocumentFragment should be treated alike" );
} );
-QUnit.asyncTest( "html() - script exceptions bubble (#11743)", 2, function( assert ) {
+QUnit.test( "html() - script exceptions bubble (#11743)", function( assert ) {
+ assert.expect( 3 );
- // Support: Android 2.3 only
- // Android 2.3 doesn't fire the window.onerror handler, just accept the reality there.
- if ( /android 2\.3/i.test( navigator.userAgent ) ) {
- assert.ok( true, "Test skipped, Android 2.3 doesn't fire window.onerror for " +
- "errors in dynamically included scripts" );
- assert.ok( true, "Test skipped, Android 2.3 doesn't fire window.onerror for " +
- "errors in dynamically included scripts" );
- QUnit.start();
- return;
- }
+ assert.throws(function() {
+ jQuery("#qunit-fixture").html("<script>undefined(); ok( false, 'Exception not thrown' );</script>");
+ assert.ok( false, "Exception ignored" );
+ }, "Exception bubbled from inline script" );
- var onerror = window.onerror;
+ if ( jQuery.ajax ) {
+ var onerror = window.onerror;
+ window.onerror = function() {
+ ok( true, "Exception thrown in remote script" );
+ };
- setTimeout( function() {
+ jQuery("#qunit-fixture").html("<script src='data/badcall.js'></script>");
+ assert.ok( true, "Exception ignored" );
window.onerror = onerror;
-
- QUnit.start();
- }, 1000 );
-
- window.onerror = function() {
- assert.ok( true, "Exception thrown" );
-
- if ( jQuery.ajax ) {
- window.onerror = function() {
- assert.ok( true, "Exception thrown in remote script" );
- };
-
- jQuery( "#qunit-fixture" ).html( "<script src='data/badcall.js'></script>" );
- assert.ok( true, "Exception ignored" );
- } else {
- assert.ok( true, "No jQuery.ajax" );
- assert.ok( true, "No jQuery.ajax" );
- }
- };
-
- jQuery( "#qunit-fixture" ).html( "<script>undefined();</script>" );
-} );
+ } else {
+ assert.ok( true, "No jQuery.ajax" );
+ assert.ok( true, "No jQuery.ajax" );
+ }
+});
QUnit.test( "checked state is cloned with clone()", function( assert ) {