document.write 작업 정보

8726 단어 JavaScript

개요


document.write는 사용을 권장하지 않지만 GTA에서 사용했기 때문에 동작을 검증해 봤습니다.

검증 프로그램


document.write와 insert Adjacent Element (삽입 위치 지정) 을 통해script 탭을 DOM에 삽입합니다.
삽입된 JS의 실행 순서를 확인합니다.

HTML


index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
    <script>console.log('header!')</script>
</head>
<body>
    <script type="text/javascript" src="./js/first.js"></script>
    <script>
        console.log('after script');
    </script>
    <img src="../masuo.jpeg" alt="masuo-san">
</body>
</html>
읽힌 퍼스트.js에서second까지.js를 읽습니다.
first.js(insertAdjacentElement)
(() => {
    console.log('first');

    const second = document.createElement('script');
    second.id = 'second';
    second.src="./js/second.js";
    second.type = 'text/javascript';

    const first = document.getElementById('first');
    first.insertAdjacentElement('afterend', second);
})();

console.log('first out');
first.js(document.write)
(() => {
    console.log('first');

    document.write('<script id="second" type="text/javascript" src="./js/second.js"></script>');
})();

console.log('first out');
second.js(insertAdjacentElement)
(() => {
    console.log('second');

    const third = document.createElement('script');
    third.type = 'text/javascript';
    third.innerText = `console.log('third inline');`;

    const second = document.getElementById('second');
    second.insertAdjacentElement('afterend', third);
})();

console.log('second out');
second.js(document.write)
(() => {
    console.log('second');

    document.write('<script id="third" type="text/javascript">console.log("third inline");</script>');
})();

console.log('second out');

결실


insertAdjacentElement



document.write



고찰하다.

  • JavaScript 파일의 읽기는 비동기적이기 때문에 특별히 지정하지 않으면 읽을 때 실행됩니다.
  • 따라서 insertAdjacentElement은 원래 내연된 스크립트 다음에 실행됩니다.
  • 한 쪽의document.write가 삽입된script를 즉시 실행하지 못하게 하기 → js 파일을 읽고 실행할 때까지 지적이 있으면 연락 주세요.

    좋은 웹페이지 즐겨찾기