From: John Resig <jeresig@gmail.com>
Date: Mon, 27 Jul 2009 13:02:41 +0000 (+0000)
Subject: Added an extra documentElement check to isXMLDoc for IE - and added a number of unit... 
X-Git-Url: http://git.asbjorn.it/?a=commitdiff_plain;h=2cd9ee3510a03091c929b849ea164c9f97e262e7;p=jquery.git

Added an extra documentElement check to isXMLDoc for IE - and added a number of unit tests for isXMLDoc. Fixes #4833.
---

diff --git a/src/core.js b/src/core.js
index cb9b528..097ff42 100644
--- a/src/core.js
+++ b/src/core.js
@@ -313,7 +313,10 @@ jQuery.extend({
 
 	// check if an element is in a (or is an) XML document
 	isXMLDoc: function( elem ) {
-		return (elem.ownerDocument || elem).documentElement.nodeName !== "HTML";
+		// documentElement is verified for cases where it doesn't yet exist
+		// (such as loading iframes in IE - #4833)
+		var documentElement = (elem.ownerDocument || elem).documentElement;
+		return !!documentElement && documentElement.nodeName !== "HTML";
 	},
 
 	// Evalulates a script in a global context
diff --git a/test/unit/core.js b/test/unit/core.js
index 28be653..c58f13f 100644
--- a/test/unit/core.js
+++ b/test/unit/core.js
@@ -269,6 +269,39 @@ test("isFunction", function() {
 	});
 });
 
+test("isXMLDoc - HTML", function() {
+	expect(4);
+
+	ok( !jQuery.isXMLDoc( document ), "HTML document" );
+	ok( !jQuery.isXMLDoc( document.documentElement ), "HTML documentElement" );
+	ok( !jQuery.isXMLDoc( document.body ), "HTML Body Element" );
+
+	var iframe = document.createElement("iframe");
+	document.body.appendChild( iframe );
+
+	try {
+		var body = jQuery(iframe).contents().find("body")[0];
+		ok( !jQuery.isXMLDoc( body ), "Iframe body element" );
+	} catch(e){
+		ok( false, "Iframe body element" );
+	}
+
+	document.body.removeChild( iframe );
+});
+
+if ( !isLocal ) {
+test("isXMLDoc - XML", function() {
+	expect(3);
+	stop();
+	jQuery.get('data/dashboard.xml', function(xml) {
+		ok( jQuery.isXMLDoc( xml ), "XML document" );
+		ok( jQuery.isXMLDoc( xml.documentElement ), "XML documentElement" );
+		ok( jQuery.isXMLDoc( jQuery("tab", xml)[0] ), "XML Tab Element" );
+		start();
+	});
+});
+}
+
 test("jQuery('html')", function() {
 	expect(8);
 
@@ -611,4 +644,4 @@ test("jQuery.isEmptyObject", function(){
 	
 	// What about this ?
 	// equals(true, jQuery.isEmptyObject(null), "isEmptyObject on null" );
-});
\ No newline at end of file
+});