<!DOCTYPE html>
<html>
<head>
<style>
html { font: 400 100%/1 Consolas; }
html, body { height: 100%; width: 100%; }
main { height: auto; width: 100%; padding:10px;}
section { height: auto; width: 100%; padding:10px}
fieldset {min-width:70%;margin:20px 0;padding:10px;}
var {background:rgba(0,0,0,.7);color:lime;}
</style>
</head>

<body>


   <h1></h1>

<main>
 <p><var>injectCSS =</var> All paragraphs will be red</p>
   <section>
  <form id='test0'>
 <fieldset>
 <legend>Test Log</legend>
 <label for='msg0'>injectCSS()...:&nbsp;
 <output id='msg0'></output></label>
 <br>
 <label for='msg1'>injectJS()....:&nbsp;
 <output id='msg1'></output></label>
 </fieldset>
 </form>
   </section>
   <section>

</section>

</main>
<footer>
<p>Review this page with Firebug/DevTools and we'll see an extra &lt;style&gt;  tag in the &lt;head&gt; and we'll see an extra &lt;script&gt; tag right before the closing &lt;\body&gt; tag.</p>
</footer>


<script>
     // HTMLFormControlsCollection★
    var x0 = document.forms[0].elements;
   	var m0 = x0.msg0;
		var m1 = x0.msg1;
		
		// Input strings of styles and scripts that are to be injected
	  var css = "p {color:red}";
		var js = "document.querySelector('h1').innerHTML = '<var>injectJS =</var> H1 HTML'"; 
		
		/* This function manages injectCSS() and injectJS() functions by using
		|| the async/await★ keywords. Times are provided by 
		|| performance.now()★ method.
		*///* ✎  Delete/add the first * to disable/enable this version of inject().
		// The proceeding edit ✎  must be done as well.
		var inject = async function() {
				var wait0 = injectCSS.call(this, css);
				var wait1 = injectJS.call(this, js);
				m0.value = performance.now();
				var init1 = await wait1; 
				m1.value = performance.now()
				return false;
		};
		/*/// ✎ Delete/add the first / to enable/disable this version of inject().
		// The previous edit ✎  must be done as well.
		
		var inject = function() {
				injectCSS.call(this, css);
 				m0.value = performance.now();
				injectJS.call(this, js); 
				m1.value = performance.now()
				return false;
		};
		
		/* These 2 functions do the same thing but with different content.
		|| They could be refactored into one function but I made them
		|| separately to show injectCSS() sepatately for QA SO46985099. 
		|| Both creates a tag, then writes the code in it, and then appends
		|| it to DOM.
		*/		
    function injectCSS(style) {
        var sty = document.createElement("style");
				sty.innerHTML = style;
				document.querySelector('head').appendChild(sty);
    }
		function injectJS(script) {
        var scr = document.createElement("script");
				scr.innerHTML = script;
				document.body.appendChild(scr);
    }

		/* The main function inject() is called at window.load. This is the last
		|| loading event possible in which we are able call our function. This
		|| ensures that specific CSS is loaded before specific JS is called. 
		|| This is the last step in the loading process, therefore there should be
		|| no more styles to render or script that blocks.
		*/
		window.onload = inject;
		
		
		
		
    </script>
</body>
</html>