diff --git a/src/core.js b/src/core.js
index 3b0c4656..0cf0444c 100644
--- a/src/core.js
+++ b/src/core.js
@@ -564,15 +564,19 @@ jQuery.extend({
data = jQuery.trim( data );
if ( data ) {
- if ( window.execScript )
- window.execScript( data );
-
- else if ( jQuery.browser.safari )
- // safari doesn't provide a synchronous global eval
- window.setTimeout( data, 0 );
+ // Inspired by code by Andrea Giammarchi
+ // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+ var head = document.getElementsByTagName("head")[0] || document.documentElement,
+ script = document.createElement("script");
+ script.type = "text/javascript";
+ if ( jQuery.browser.msie )
+ script.text = data;
else
- eval.call( window, data );
+ script.appendChild( document.createTextNode( data ) );
+
+ head.appendChild( script );
+ head.removeChild( script );
}
},
diff --git a/test/unit/core.js b/test/unit/core.js
index 730e18c8..32ff83e8 100644
--- a/test/unit/core.js
+++ b/test/unit/core.js
@@ -123,11 +123,18 @@ test("isFunction", function() {
});
});
+var foo = false;
+
test("$('html')", function() {
- expect(2);
+ expect(4);
reset();
- ok( $("")[0], "Creating a script" );
+ foo = false;
+ var s = $("")[0];
+ ok( s, "Creating a script" );
+ ok( !foo, "Make sure the script wasn't executed prematurely" );
+ $("body").append(s);
+ ok( foo, "Executing a scripts contents in the right context" );
reset();
ok( $("")[0], "Creating a link" );