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;

} );

