From 6403cf614fc2db42517005e80eef7bc5b2223d01 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Micha=C5=82=20Go=C5=82=C4=99biowski?= Date: Wed, 2 Mar 2016 12:28:00 +0100 Subject: [PATCH] Core: drop the document.implementation.createHTMLDocument usage The document.implementation.createHTMLDocument("") method creates inert documents which is good but using it has introduced issues around anchor elements href property not resolving according to the current document. Because of that, this patch is getting backed out on 1.x/2.x branches. (cherry-picked from c5c30735311c74c60689fcabdcf2cb192524000e) Refs cfe468f29c4cbe1a457d0feb17dec90dcfd7c280 Refs gh-1505 Fixes gh-2941 --- src/core/parseHTML.js | 14 +++----------- src/core/support.js | 21 --------------------- test/unit/core.js | 16 ---------------- test/unit/support.js | 19 ------------------- 4 files changed, 3 insertions(+), 67 deletions(-) delete mode 100644 src/core/support.js diff --git a/src/core/parseHTML.js b/src/core/parseHTML.js index 55f67c43e..327d6ef5c 100644 --- a/src/core/parseHTML.js +++ b/src/core/parseHTML.js @@ -2,11 +2,8 @@ define( [ "../core", "../var/document", "./var/rsingleTag", - "../manipulation/buildFragment", - - // This is the only module that needs core/support - "./support" -], function( jQuery, document, rsingleTag, buildFragment, support ) { + "../manipulation/buildFragment" +], function( jQuery, document, rsingleTag, buildFragment ) { // data: string of html // context (optional): If specified, the fragment will be created in this context, @@ -20,12 +17,7 @@ jQuery.parseHTML = function( data, context, keepScripts ) { keepScripts = context; context = false; } - - // document.implementation stops scripts or inline event handlers from - // being executed immediately - context = context || ( support.createHTMLDocument ? - document.implementation.createHTMLDocument( "" ) : - document ); + context = context || document; var parsed = rsingleTag.exec( data ), scripts = !keepScripts && []; diff --git a/src/core/support.js b/src/core/support.js deleted file mode 100644 index 36d19715f..000000000 --- a/src/core/support.js +++ /dev/null @@ -1,21 +0,0 @@ -define( [ - "../var/document", - "../var/support" -], function( document, support ) { - -// Support: Safari 8+ -// In Safari 8 documents created via document.implementation.createHTMLDocument -// collapse sibling forms: the second one becomes a child of the first one. -// Because of that, this security measure has to be disabled in Safari 8. -// https://bugs.webkit.org/show_bug.cgi?id=137337 -support.createHTMLDocument = ( function() { - if ( !document.implementation.createHTMLDocument ) { - return false; - } - var doc = document.implementation.createHTMLDocument( "" ); - doc.body.innerHTML = "
"; - return doc.body.childNodes.length === 2; -} )(); - -return support; -} ); diff --git a/test/unit/core.js b/test/unit/core.js index 81fbd4e54..a0cf715cf 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -1541,22 +1541,6 @@ QUnit.test("jQuery.parseHTML", function( assert ) { assert.equal( jQuery.parseHTML( "" )[ 1 ].parentNode.nodeType, 11, "parentNode should be documentFragment" ); } ); -if ( jQuery.support.createHTMLDocument && !/opera.*version\/12\.1/i.test( navigator.userAgent ) ) { - QUnit.asyncTest( "jQuery.parseHTML", function( assert ) { - assert.expect( 1 ); - - Globals.register( "parseHTMLError" ); - - jQuery.globalEval( "parseHTMLError = false;" ); - jQuery.parseHTML( "" ); - - window.setTimeout( function() { - QUnit.start(); - assert.equal( window.parseHTMLError, false, "onerror eventhandler has not been called." ); - }, 2000 ); - } ); -} - QUnit.test( "jQuery.parseJSON", function( assert ) { assert.expect( 20 ); diff --git a/test/unit/support.js b/test/unit/support.js index 49c32318d..46f487115 100644 --- a/test/unit/support.js +++ b/test/unit/support.js @@ -105,7 +105,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": version >= 13, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -146,7 +145,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -187,7 +185,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": false, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -228,7 +225,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": false, "cors": false, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -269,7 +265,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": false, - "createHTMLDocument": false, "cssFloat": false, "deleteExpando": false, "enctype": true, @@ -310,7 +305,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": false, - "createHTMLDocument": false, "cssFloat": false, "deleteExpando": false, "enctype": true, @@ -351,7 +345,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": false, - "createHTMLDocument": false, "cssFloat": false, "deleteExpando": false, "enctype": true, @@ -395,7 +388,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -436,7 +428,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -477,7 +468,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": false, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -518,7 +508,6 @@ testIframeWithCallback( "checkOn": false, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -559,7 +548,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -600,7 +588,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -641,7 +628,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -682,7 +668,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": false, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -723,7 +708,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -764,7 +748,6 @@ testIframeWithCallback( "checkOn": true, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -805,7 +788,6 @@ testIframeWithCallback( "checkOn": false, "clearCloneStyle": true, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, @@ -846,7 +828,6 @@ testIframeWithCallback( "checkOn": false, "clearCloneStyle": false, "cors": true, - "createHTMLDocument": true, "cssFloat": true, "deleteExpando": true, "enctype": true, -- 2.39.5