Brought back jQuery.globalEval(), fixing bug #1425.
authorJohn Resig <jeresig@gmail.com>
Tue, 31 Jul 2007 02:59:53 +0000 (02:59 +0000)
committerJohn Resig <jeresig@gmail.com>
Tue, 31 Jul 2007 02:59:53 +0000 (02:59 +0000)
src/ajax/ajax.js
src/jquery/jquery.js

index 645caf7..392ea16 100644 (file)
@@ -765,7 +765,7 @@ jQuery.extend({
 
                // If the type is "script", eval it in global context
                if ( type == "script" )
-                       (new Function( data ))();
+                       jQuery.globalEval( data );
 
                // Get the JavaScript object, if JSON is used.
                if ( type == "json" )
index a0a2009..440e20e 100644 (file)
@@ -1191,7 +1191,7 @@ jQuery.fn = jQuery.prototype = {
                                        if ( this.src )
                                                jQuery.ajax({ url: this.src, async: false, dataType: "script" });
                                        else
-                                               (new Function( this.text || this.textContent || this.innerHTML || "" ))();
+                                               jQuery.globalEval( this.text || this.textContent || this.innerHTML || "" );
                                } else
                                        fn.apply( obj, [ clone ? this.cloneNode(true) : this ] );
                        });
@@ -1322,6 +1322,21 @@ jQuery.extend({
                        elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
        },
 
+       // Evalulates a script in a global context
+       // Evaluates Async. in Safari 2 :-(
+       globalEval: function( data ) {
+               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 );
+                       else
+                               eval.call( window, data );
+               }
+       },
+
        nodeName: function( elem, name ) {
                return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
        },