javascriptfirebuginnerhtml

setting innerHTML with a script inside


If I run the following line in Firebug on any page:

document.documentElement.innerHTML="<script>alert(1)</script>";

why isn't the alert command executed?


Solution

  • It looks like that your <script> tag is being added as you expect, but the code within it is not being executed. The same failure happens if you try using document.head (or any other DOM element, it seems). For whatever reason (possibly standards compliance, possible security), inline code inside of <script> blocks that are added via .innerHTML simply doesn't run.

    However, I do have working code that produces similar functionality:

    var script = document.createElement('script');
    script[(script.innerText===undefined?"textContent":"innerText")] = 'alert(1);';
    document.documentElement.appendChild(script);
    

    Here, you add the <script> block with documentElement.appendChild and use textContent or innerText to set the content of the <script>.