aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Resig <jeresig@gmail.com>2007-09-15 02:16:29 +0000
committerJohn Resig <jeresig@gmail.com>2007-09-15 02:16:29 +0000
commit606b863edaff29035960e4d813b45d63b8d92876 (patch)
treedf1c3216c418ca80e1d6c23c56835ed8802b2bc8
parent62d84e44ac3b4a3673c320514bbf5ac8dc7712d6 (diff)
downloadjquery-606b863edaff29035960e4d813b45d63b8d92876.tar.gz
jquery-606b863edaff29035960e4d813b45d63b8d92876.zip
Fixed bug #1594, #1565, #1598 - all of which were concerning the improper execution of embedded scripts in IE and Safari.
-rw-r--r--src/core.js28
-rw-r--r--test/unit/core.js11
2 files changed, 29 insertions, 10 deletions
diff --git a/src/core.js b/src/core.js
index eb135400a..d9749ba49 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 db4785609..dce86d828 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("<b>test</b>");
var pass = true;
@@ -830,8 +830,13 @@ test("html(String)", function() {
}
ok( pass, "Set HTML" );
- // Ccommented out until we can resolve it
- // $("#main").html('<script type="text/javascript">ok( true, "$().html().evalScripts() Evals Scripts Twice in Firefox, see #975" );</script>').evalScripts();
+ stop();
+
+ $("#main").html('<script type="text/javascript">ok( true, "$().html().evalScripts() Evals Scripts Twice in Firefox, see #975" );</script>');
+
+ $("#main").html('foo <form><script type="text/javascript">ok( true, "$().html().evalScripts() Evals Scripts Twice in Firefox, see #975" );</script></form>');
+
+ setTimeout( start, 100 );
});
test("filter()", function() {