Avoid document.write

By Chip Cox
July 31, 2023

Using document.write in modern web development is generally considered a bad practice and can lead to performance issues and unexpected behavior. Here's why you should avoid it and what alternatives you can use.

Why Avoid document.write?

  1. Blocking Behavior: document.write is synchronous, meaning it halts the rendering of the page while it executes. This can lead to a poor user experience, especially if used in scripts that may delay page loading.

  2. Unpredictable Results: Using document.write after the page has loaded (e.g., in an event handler) can overwrite the entire content of the page, leading to unexpected results.

  3. Incompatibility with Asynchronous Scripts: Modern browsers load scripts asynchronously, and document.write might not behave as expected within such scripts, causing further inconsistencies.

  4. Security Risks: If not handled properly, document.write can expose your site to cross-site scripting (XSS) attacks.

  5. Deprecated in Some Contexts: In some scenarios, like loading scripts inside an iframe, browsers may ignore document.write altogether.

Alternatives to document.write

Here are ways to achieve similar functionality without using document.write:

1. Manipulate the DOM Using Standard Methods

You can use methods like appendChild, insertBefore, and innerHTML to manipulate the DOM:

// Creating a new element
var newElement = document.createElement('div');
newElement.textContent = 'This is a new element';

// Appending it to the body
document.body.appendChild(newElement);

2. Use Asynchronous Loading for Scripts

If you're using document.write to load other scripts, consider using the async or defer attributes for script tags or dynamic script loading:

// Creating a new script tag
var script = document.createElement('script');
script.src = 'path/to/your/script.js';
script.async = true;

// Appending it to the head
document.head.appendChild(script);

3. Leverage Modern Front-End Frameworks

If you're building complex applications, modern frameworks like React, Angular, or Vue.js provide powerful ways to manage and render content without relying on document.write.

4. Utilize Templates and Template Literals

Use client-side templating or JavaScript template literals for constructing complex HTML structures:

const name = 'John';
const template = `<div>Hello, ${name}!</div>`;
document.body.innerHTML += template;

Conclusion

Avoiding document.write in favor of more modern and efficient techniques not only aligns with best practices but also leads to a more performant and secure application. By using standard DOM manipulation methods, asynchronous loading, and potentially leveraging modern front-end frameworks, you can create rich and responsive web experiences without the drawbacks associated with document.write.

Was this article helpful?

Thanks for your feedback!