Nice programing

문서에 쓰기 실행 : 명시 적으로 열리지 않는 한 비동기 적으로로드 된 외부 스크립트에서 문서에 쓸 수 없습니다.

nicepro 2020. 11. 21. 09:17
반응형

문서에 쓰기 실행 : 명시 적으로 열리지 않는 한 비동기 적으로로드 된 외부 스크립트에서 문서에 쓸 수 없습니다.


페이지로드가 실행 된 후 다음과 같이 특정 스크립트를로드하려고합니다.

function downloadJSAtOnload(){
            var element = document.createElement("script");
            element.src = "scriptSrc";
            document.body.appendChild(element);
        }

         if (window.addEventListener)
                  window.addEventListener("load", downloadJSAtOnload, false);
            else if (window.attachEvent)
                  window.attachEvent("onload", downloadJSAtOnload);
            else window.onload = downloadJSAtOnload;

그리고이 스크립트는 'scriptSrc'를 실행 및 다운로드하고 본문 태그의 끝 바로 앞에 추가하는 것처럼 보이지만 콘솔 (크롬)에 다음 메시지 (오류 아님)를 생성합니다.

'문서'에서 '쓰기'를 실행하지 못했습니다. 비동기 적으로로드 된 외부 스크립트를 명시 적으로 열지 않는 한 문서에 쓸 수 없습니다.

이것은 무엇을 의미합니까? 그리고 내가 뭔가 다르게해야하나요? 예상되는 동작을 얻음에도 불구하고?


비동기 적으로로드 된 스크립트는 문서가 완전히 구문 분석되고 닫힌 후에 실행될 수 있습니다. 따라서 document.write()이러한 스크립트 에서는 사용할 수 없습니다 (기술적으로는 할 수 있지만 원하는 작업을 수행하지 않음).

당신은 어떤 교체해야합니다 document.write()DOM 요소를 만든 다음에 특정 부모에 삽입하여 명시 적 DOM 조작에 해당 스크립트에 문을 .appendChild()하거나 .insertBefore()또는 설정 .innerHTML또는 같은 직접 DOM 조작에 대한 몇 가지 메커니즘.

예를 들어, 인라인 스크립트에서 이러한 유형의 코드 대신 :

<div id="container">
<script>
document.write('<span style="color:red;">Hello</span>');
</script>
</div>

이를 사용하여 동적으로로드 된 스크립트에서 위의 인라인 스크립트를 대체합니다.

var container = document.getElementById("container");
var content = document.createElement("span");
content.style.color = "red";
content.innerHTML = "Hello";
container.appendChild(content);

또는 컨테이너에 추가해야하는 다른 콘텐츠가없는 경우 다음과 같이하면됩니다.

var container = document.getElementById("container");
container.innerHTML = '<span style="color:red;">Hello</span>';

파티에 조금 늦었지만 Krux는 Postscribe 라는 스크립트를 만들었습니다 . 이 문제를 해결하는 데 사용할 수있었습니다.


이것이 내가이 같은 문제가있는 사람에게 유용하다면. jQuery를 통해 웹 페이지에 바닥 글을 가져 왔습니다. 그 바닥 글 안에는 광고와 리 타게팅을위한 구글 스크립트가있었습니다. 이 스크립트를 바닥 글에서 옮겨서 페이지에 직접 배치해야했기 때문에 알림이 사라졌습니다.

참고 URL : https://stackoverflow.com/questions/24297829/execute-write-on-doc-it-isnt-possible-to-write-into-a-document-from-an-asynchr

반응형