DEV Community

Morteza Mirmojarabian
Morteza Mirmojarabian

Posted on

Iframe document write doesn't update JavaScript

Here's a basic HTML editor:

CSS

textarea,
iframe {
  width: 400px;
  height: 300px;
}
Enter fullscreen mode Exit fullscreen mode

HTML

<textarea></textarea>
<iframe></iframe>
Enter fullscreen mode Exit fullscreen mode

JavaScript

var textarea = document.querySelector('textarea'),
  iframe = document.querySelector('iframe');

function preview() {
  var iframeDoc = iframe.contentDocument;
  iframeDoc.open();
  iframeDoc.write(textarea.value);
  iframeDoc.close();
}

textarea.addEventListener('input', preview);
Enter fullscreen mode Exit fullscreen mode

DEMO

It updates the HTML and CSS you put in the textarea, but you canโ€™t use JavaScript const or let variables as it throws the following syntax error as soon as you edit the inserted code:

Identifier * has already been declared

To see what I mean, insert the following sample code in the textarea:

<!doctype html>
<html lang="en">
<head>
  <title>Sample Code</title>
</head>
<body>
  <p>Hello!</p>
  <script>
    const p = document.querySelector('p');
    p.style.color = 'blue';
  </script>
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

Now change Hello! to Hello, world!, or blue to red.

Whatโ€™s the solution so the user can keep editing the code without getting that error?

Top comments (0)