define( [

"../var/document"

], function( document ) {

"use strict";

var preservedScriptAttributes = {
        type: true,
        src: true,
        nonce: true,
        noModule: true
};

function DOMEval( code, node, doc ) {
        doc = doc || document;

        var i, val,
                script = doc.createElement( "script" );

        script.text = code;
        if ( node ) {
                for ( i in preservedScriptAttributes ) {

                        // Support: Firefox 64+, Edge 18+
                        // Some browsers don't support the "nonce" property on scripts.
                        // On the other hand, just using `getAttribute` is not enough as
                        // the `nonce` attribute is reset to an empty string whenever it
                        // becomes browsing-context connected.
                        // See https://github.com/whatwg/html/issues/2369
                        // See https://html.spec.whatwg.org/#nonce-attributes
                        // The `node.getAttribute` check was added for the sake of
                        // `jQuery.globalEval` so that it can fake a nonce-containing node
                        // via an object.
                        val = node[ i ] || node.getAttribute && node.getAttribute( i );
                        if ( val ) {
                                script.setAttribute( i, val );
                        }
                }
        }
        doc.head.appendChild( script ).parentNode.removeChild( script );
}

return DOMEval;

} );