From 606b863edaff29035960e4d813b45d63b8d92876 Mon Sep 17 00:00:00 2001 From: John Resig Date: Sat, 15 Sep 2007 02:16:29 +0000 Subject: [PATCH] Fixed bug #1594, #1565, #1598 - all of which were concerning the improper execution of embedded scripts in IE and Safari. --- src/core.js | 28 +++++++++++++++++++++------- test/unit/core.js | 11 ++++++++--- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/core.js b/src/core.js index eb135400..d9749ba4 100644 --- a/src/core.js +++ b/src/core.js @@ -394,18 +394,32 @@ jQuery.fn = jQuery.prototype = { obj = this.getElementsByTagName("tbody")[0] || this.appendChild(document.createElement("tbody")); jQuery.each( a, function(){ - if ( jQuery.nodeName(this, "script") ) { - if ( this.src ) - jQuery.ajax({ url: this.src, async: false, dataType: "script" }); - else - jQuery.globalEval( this.text || this.textContent || this.innerHTML || "" ); - } else - fn.apply( obj, [ clone ? this.cloneNode(true) : this ] ); + var elem = clone ? this.cloneNode(true) : this; + if ( !evalScript(0, elem) ) + fn.call( obj, elem ); }); }); } }; +function evalScript(i, elem){ + var script = jQuery.nodeName(elem, "script"); + + if ( script ) { + if ( elem.src ) + jQuery.ajax({ url: elem.src, async: false, dataType: "script" }); + else + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + + if ( elem.parentNode ) + elem.parentNode.removeChild(elem); + + } else if ( elem.nodeType == 1 ) + jQuery("script", elem).each(evalScript); + + return script; +} + jQuery.extend = jQuery.fn.extend = function() { // copy reference to target object var target = arguments[0] || {}, a = 1, al = arguments.length, deep = false; diff --git a/test/unit/core.js b/test/unit/core.js index db478560..dce86d82 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -821,7 +821,7 @@ test("val(String)", function() { }); test("html(String)", function() { - expect(1); + expect(3); var div = $("div"); div.html("test"); var pass = true; @@ -830,8 +830,13 @@ test("html(String)", function() { } ok( pass, "Set HTML" ); - // Ccommented out until we can resolve it - // $("#main").html('').evalScripts(); + stop(); + + $("#main").html(''); + + $("#main").html('foo
'); + + setTimeout( start, 100 ); }); test("filter()", function() {