mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Core: set the base href of the context in parseHTML
Fixes gh-2965 Close gh-3022
This commit is contained in:
parent
5cbb234dd3
commit
10fc59007d
@ -21,14 +21,28 @@ jQuery.parseHTML = function( data, context, keepScripts ) {
|
||||
context = false;
|
||||
}
|
||||
|
||||
// Stop scripts or inline event handlers from being executed immediately
|
||||
// by using document.implementation
|
||||
context = context || ( support.createHTMLDocument ?
|
||||
document.implementation.createHTMLDocument( "" ) :
|
||||
document );
|
||||
var base, parsed, scripts;
|
||||
|
||||
var parsed = rsingleTag.exec( data ),
|
||||
scripts = !keepScripts && [];
|
||||
if ( !context ) {
|
||||
|
||||
// Stop scripts or inline event handlers from being executed immediately
|
||||
// by using document.implementation
|
||||
if ( support.createHTMLDocument ) {
|
||||
context = document.implementation.createHTMLDocument( "" );
|
||||
|
||||
// Set the base href for the created document
|
||||
// so any parsed elements with URLs
|
||||
// are based on the document's URL (gh-2965)
|
||||
base = context.createElement( "base" );
|
||||
base.href = document.location.href;
|
||||
context.head.appendChild( base );
|
||||
} else {
|
||||
context = document;
|
||||
}
|
||||
}
|
||||
|
||||
parsed = rsingleTag.exec( data );
|
||||
scripts = !keepScripts && [];
|
||||
|
||||
// Single tag
|
||||
if ( parsed ) {
|
||||
|
@ -1563,6 +1563,15 @@ QUnit.test( "jQuery.parseHTML", function( assert ) {
|
||||
assert.ok( jQuery.parseHTML( "<#if><tr><p>This is a test.</p></tr><#/if>" ) || true, "Garbage input should not cause error" );
|
||||
} );
|
||||
|
||||
QUnit.test( "jQuery.parseHTML(<a href>) - gh-2965", function( assert ) {
|
||||
assert.expect( 1 );
|
||||
|
||||
var html = "<a href='test.html'></a>",
|
||||
href = jQuery.parseHTML( html )[ 0 ].href;
|
||||
|
||||
assert.ok( /\/test\.html$/.test( href ), "href is not lost after parsing anchor" );
|
||||
} );
|
||||
|
||||
if ( jQuery.support.createHTMLDocument ) {
|
||||
QUnit.asyncTest( "jQuery.parseHTML", function( assert ) {
|
||||
assert.expect( 1 );
|
||||
|
Loading…
Reference in New Issue
Block a user