},
// Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
globalEval: function( data ) {
- if ( data && jQuery.trim( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
+ // Inspired by code by Andrea Giammarchi
+ // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+ var head = document.head || jQuery( "head" )[ 0 ] || document.documentElement,
+ script = document.createElement( "script" );
+
+ script.text = data;
+
+ // Support: IE6
+ // Circumvent bugs with base elements (#2709 and #4378) by prepending
+ head.insertBefore( script, head.firstChild );
+ head.removeChild( script );
},
// 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
<body>
<script type="text/javascript">
-jQuery( document ).ready(function () {
+jQuery( document ).ready(function() {
window.parent.iframeCallback( jQuery('#container').length === 1 );
});
</script>
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
}
});
- test( "#11743 - jQuery.ajax() - script, throws exception", 1, function() {
- throws(function() {
- jQuery.ajax({
- url: "data/badjson.js",
- dataType: "script",
- "throws": true,
- // TODO find a way to test this asynchronously, too
- async: false,
- // Global events get confused by the exception
- global: false,
- success: function() {
- ok( false, "Success." );
- },
- error: function() {
- ok( false, "Error." );
- }
- });
- }, "exception bubbled" );
+ asyncTest( "#11743 - jQuery.ajax() - script, throws exception", 1, function() {
+ var onerror = window.onerror;
+ window.onerror = function() {
+ ok( true, "Exception thrown" );
+ window.onerror = onerror;
+ start();
+ };
+ jQuery.ajax({
+ url: "data/badjson.js",
+ dataType: "script",
+ "throws": true
+ });
});
jQuery.each( [ "method", "type" ], function( _, globalOption ) {
equal( window.globalEvalTest, 3, "Test context (this) is the window object" );
});
+test( "globalEval execution after script injection (#7862)", 1, function() {
+ 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() + ";");
+ ok( window.strictEvalTest - now < 500, "Code executed synchronously" );
+});
+
test("noConflict", function() {
expect(7);
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" );
});
-test( "html() - script exceptions bubble (#11743)", function() {
+asyncTest( "html() - script exceptions bubble (#11743)", 2, function() {
- expect( 2 );
+ var onerror = window.onerror;
- throws(function() {
- jQuery("#qunit-fixture").html("<script>undefined(); ok( false, 'Exception not thrown' );</script>");
- ok( false, "Exception ignored" );
- }, "Exception bubbled from inline script" );
+ setTimeout(function() {
+ window.onerror = onerror;
- if ( jQuery.ajax ) {
- throws(function() {
- jQuery("#qunit-fixture").html("<script src='data/badcall.js'></script>");
- ok( false, "Exception ignored" );
- }, "Exception thrown in remote script" );
- } else {
- ok( true, "No jQuery.ajax" );
- }
+ start();
+ }, 1000 );
+
+ window.onerror = function() {
+ ok( true, "Exception thrown" );
+
+ if ( jQuery.ajax ) {
+ window.onerror = function() {
+ ok( true, "Exception thrown in remote script" );
+ };
+
+ jQuery( "#qunit-fixture" ).html( "<script src='data/badcall.js'></script>" );
+ ok( true, "Exception ignored" );
+ } else {
+ ok( true, "No jQuery.ajax" );
+ ok( true, "No jQuery.ajax" );
+ }
+ };
+
+ jQuery( "#qunit-fixture" ).html( "<script>undefined();</script>" );
});
test( "checked state is cloned with clone()", function() {