Injecting JS with XMP

The xmp element is obsolete, but supported by all browsers. You could also use the template element, but JavaScript would get executed in old browsers that do not support HTML5.

Here should the result of the injected JavaScript appear.

<div id="message"></div>

<style>
xmp {display: none;}
</style>

<xmp id="jsToInject">
   <script>
   document.getElementById('message').innerHTML = 'Succesfully injected JavaScript'
   </script>
</xmp>

<script>
if ('createRange' in document) {
  /* Modern browsers (IE9+, Chrome, Edge, Firefox, Safari, ...) */
  var jsString = document.getElementById('jsToInject').textContent
  var jsNode = document.createRange().createContextualFragment(jsString)
  document.body.appendChild(jsNode)
} else {
  /* Fallback for old browsers */
  var jsString = document.getElementById('jsToInject').innerHTML
  document.write(jsString)
}
</script>

<script> var i = document.getElementById('message') i.style.backgroundColor = '#dfd' i.innerHTML = '<ins>Succesfully injected JavaScript<\/ins>' </script>