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)