2010-07-13 4 views
3

이 잘 작동 단어 'TEST'는 <body>javascript - document.write 오류?

에 추가됩니다 그러나

<script type="text/javascript"> 
    window.onload = function(){ 
     document.write('TEST'); 
    } 
</script> 

를 사용하는 경우, 다음 본문 내용이 완전히입니다 ..

<html> 
<head> 
    <script type="text/javascript"> 
     document.write('TEST'); 
    </script> 
</head> 

<body> 
    Some body content ... 
</body> 

</html> 

을 스크립트를 고려 'TEST'라는 단어로 바뀝니다. 예를 들어 오래된 내용이 제거되고 'TEST'라는 단어 만 추가됩니다.

document.write은 내가 크롬이 시도 window.onload 기능

내에서 호출 한 경우에만 발생합니다. 나 한테 실수 한거야? 어떤 제안?

답변

9

document.write()은 문서의 구문 분석이 완료되고 닫힌 후에 사용하면 불안정합니다. 동작은 예측할 수없는 크로스 브라우저이며 전혀 사용하지 않아야합니다. 대신 innerHTML 또는 createElement/createTextNode을 사용하여 DOM을 조작하십시오. Mozilla documentation에서

:

이미 자동으로 document.open 호출을 수행합니다() document.open 호출하지 않고로드 된 문서에 쓰기. 작성이 끝나면 document.close()를 호출하여 브라우저에 페이지 로딩을 완료하는 것이 좋습니다. 작성한 텍스트는 문서의 구조 모델로 구문 분석됩니다. 위의 예에서 h1 요소는 문서의 노드가됩니다.

document.write() 호출이 HTML 코드에 직접 포함되어 있으면 document.open()을 호출하지 않습니다.

등가 DOM 코드는 다음과 같습니다 첫 번째 경우에

window.onload = function(){ 
    var tNode = document.createTextNode("TEST"); 
    document.body.appendChild(tNode); 
} 
1
  1. 단어가 몸 ..이
  2. 첫 번째가 있기 때문에 작동 머리에 기록에 기록되지 않습니다 문서가 아직 writting을 위해 열려 있습니다. 일단 완료되면 (DOM이로드 된 경우) 문서가 닫히고 문서를 쓰려고 시도하여이를 대체합니다.
0

문서가 가득차면 더 이상 document.write()을 호출하면 문서 내용이 무시됩니다. 덮어 쓰기를 방지하려면 document.write()을 호출하기 전에 document.close()을 사용해야합니다.

0

먼저 div로 콘텐츠를 추가하는 것보다 window.onload 이벤트로 요소 (예 : div)를 만듭니다.

document.write('<div id="afterpostcontent"><\/div>'); 
window.onload = function() 
{ 
    document.getElementById('afterpostcontent').innerHTML = '<span>TEST<\/span>'; 
} 

당신이 콘텐츠와 외부 자바 스크립트 파일을 작성하고 단지 예를 들어, 어디서나 호출 할 수 있습니다 :

<script src="afterpostcontentcode.js"></script>