From 5d3a968e031ab8dff5c07e1d6bb4f196fb82bfa0 Mon Sep 17 00:00:00 2001 From: "basil.belokon" Date: Sun, 3 Dec 2017 15:58:09 +0600 Subject: Manipulation: Add support for scripts with module type Fixes gh-3871 Close gh-3869 --- src/core/DOMEval.js | 18 ++++++++++++++++-- src/manipulation.js | 4 ++-- src/manipulation/var/rscriptType.js | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/core/DOMEval.js b/src/core/DOMEval.js index c49c12e5e..199ec9518 100644 --- a/src/core/DOMEval.js +++ b/src/core/DOMEval.js @@ -3,12 +3,26 @@ define( [ ], function( document ) { "use strict"; - function DOMEval( code, doc ) { + var preservedScriptAttributes = { + type: true, + src: true, + noModule: true + }; + + function DOMEval( code, doc, node ) { doc = doc || document; - var script = doc.createElement( "script" ); + var i, + script = doc.createElement( "script" ); script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + if ( node[ i ] ) { + script[ i ] = node[ i ]; + } + } + } doc.head.appendChild( script ).parentNode.removeChild( script ); } diff --git a/src/manipulation.js b/src/manipulation.js index ae713fe29..142e296ad 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -194,14 +194,14 @@ function domManip( collection, args, callback, ignored ) { !dataPriv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - if ( node.src ) { + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { // Optional AJAX dependency, but won't run scripts if not present if ( jQuery._evalUrl ) { jQuery._evalUrl( node.src ); } } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); } } } diff --git a/src/manipulation/var/rscriptType.js b/src/manipulation/var/rscriptType.js index 7237c8a31..cd1430a7e 100644 --- a/src/manipulation/var/rscriptType.js +++ b/src/manipulation/var/rscriptType.js @@ -1,5 +1,5 @@ define( function() { "use strict"; - return ( /^$|\/(?:java|ecma)script/i ); + return ( /^$|^module$|\/(?:java|ecma)script/i ); } ); -- cgit v1.2.3