mirror of
https://github.com/jquery/jquery.git
synced 2025-01-10 18:24:24 +00:00
Fixes #9255: xml parsing error in $.parseXML is now properly detected for all browsers. Unit test added.
This commit is contained in:
parent
0ed99097bd
commit
27291ff06d
29
src/core.js
29
src/core.js
@ -553,24 +553,23 @@ jQuery.extend({
|
||||
},
|
||||
|
||||
// Cross-browser xml parsing
|
||||
// (xml & tmp used internally)
|
||||
parseXML: function( data , xml , tmp ) {
|
||||
|
||||
if ( window.DOMParser ) { // Standard
|
||||
tmp = new DOMParser();
|
||||
xml = tmp.parseFromString( data , "text/xml" );
|
||||
} else { // IE
|
||||
xml = new ActiveXObject( "Microsoft.XMLDOM" );
|
||||
xml.async = "false";
|
||||
xml.loadXML( data );
|
||||
parseXML: function( data ) {
|
||||
var xml, tmp;
|
||||
try {
|
||||
if ( window.DOMParser ) { // Standard
|
||||
tmp = new DOMParser();
|
||||
xml = tmp.parseFromString( data , "text/xml" );
|
||||
} else { // IE
|
||||
xml = new ActiveXObject( "Microsoft.XMLDOM" );
|
||||
xml.async = "false";
|
||||
xml.loadXML( data );
|
||||
}
|
||||
} catch( e ) {
|
||||
xml = undefined;
|
||||
}
|
||||
|
||||
tmp = xml.documentElement;
|
||||
|
||||
if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
|
||||
if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
|
||||
jQuery.error( "Invalid XML: " + data );
|
||||
}
|
||||
|
||||
return xml;
|
||||
},
|
||||
|
||||
|
@ -867,7 +867,7 @@ test("jQuery.each(Object,Function)", function() {
|
||||
f[i] = "baz";
|
||||
});
|
||||
equals( "baz", f.foo, "Loop over a function" );
|
||||
|
||||
|
||||
var stylesheet_count = 0;
|
||||
jQuery.each(document.styleSheets, function(i){
|
||||
stylesheet_count++;
|
||||
@ -984,6 +984,26 @@ test("jQuery.parseJSON", function(){
|
||||
}
|
||||
});
|
||||
|
||||
test("jQuery.parseXML", 4, function(){
|
||||
var xml, tmp;
|
||||
try {
|
||||
xml = jQuery.parseXML( "<p>A <b>well-formed</b> xml string</p>" );
|
||||
tmp = xml.getElementsByTagName( "p" )[ 0 ];
|
||||
ok( !!tmp, "<p> present in document" );
|
||||
tmp = tmp.getElementsByTagName( "b" )[ 0 ];
|
||||
ok( !!tmp, "<b> present in document" );
|
||||
strictEqual( tmp.childNodes[ 0 ].nodeValue, "well-formed", "<b> text is as expected" );
|
||||
} catch (e) {
|
||||
strictEqual( e, undefined, "unexpected error" );
|
||||
}
|
||||
try {
|
||||
xml = jQuery.parseXML( "<p>Not a <<b>well-formed</b> xml string</p>" );
|
||||
ok( false, "invalid xml not detected" );
|
||||
} catch( e ) {
|
||||
strictEqual( e, "Invalid XML: <p>Not a <<b>well-formed</b> xml string</p>", "invalid xml detected" );
|
||||
}
|
||||
});
|
||||
|
||||
test("jQuery.sub() - Static Methods", function(){
|
||||
expect(18);
|
||||
var Subclass = jQuery.sub();
|
||||
@ -1108,7 +1128,7 @@ test("jQuery.sub() - .fn Methods", function(){
|
||||
test("jQuery.camelCase()", function() {
|
||||
|
||||
var tests = {
|
||||
"foo-bar": "fooBar",
|
||||
"foo-bar": "fooBar",
|
||||
"foo-bar-baz": "fooBarBaz"
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user