2013-12-18 2 views
4

새로운 광고 서비스를 시도하고 있으며 광고를로드하는 데 기능 인터페이스를 제공하지 않습니다. 사용자의 화면 크기에 따라 다른 크기의 광고를 표시하려고하며이 서비스를 사용하려면 각 크기에 다른 .js 개의 URL을로드해야합니다. DOM 조작 방법 대신 document.write를 사용해야하는 이유는 무엇입니까?

나는 원래 쓰기 시도 :

<script type="text/javascript"><!-- 
    var dochead = document.getElementsByTagName('head')[0]; 
    var newscript = document.createElement('script'); 
    newscript.type = "text/javascript"; 
    newscript.src = '//ads-by.madadsmedia.com/tags/22430/9194/async/' + (screen.width >= 1360 ? '160' : '120') + 'x600.js'; 
    dochead.appendChild(newscript); 
    //--> 
</script> 

을하지만 난 그냥 빈 페이지를 얻었다. Chrome 개발자 도구를 살펴본 결과 제대로 스크립트를로드하는 것처럼 보였습니다. 스크립트는 Google에서 다른 스크립트를로드하고 DOM에도 표시됩니다. 그러나 광고 이미지가 없습니다. 내가 내 스크립트를 변경

는 :

<script language="JavaScript" type="text/javascript"> 
var prot = document.location.protocol; 
var adwidth = (screen.width >= 1360 ? '160' : '120'); 
document.write('<script language="JavaScript" type="text/javascript"'); document.write('src="'+prot+'//ads-by.madadsmedia.com/tags/22430/9194/async/'+adwidth+'x600.js">'); document.write('<\/scr' + 'ipt>'); 
</script> 

제대로했다. 나는 일반적으로 document.write을 사용하는 것을 좋아하지 않는다. 나는 왜 이것이이 경우에 필요하다고 생각 하는가? 광고 서비스의 스크립트는 document.write을 광범위하게 사용합니다. 그 이유는 무엇입니까?

+0

미안하지만, 나는 그것을 알아 차린의 생각 당신은 첫 번째 줄에 자바 스크립트 구문 오류가 있습니다. '

+0

더 이상 해당 광고 서비스를 사용하지 않으므로 이는 의의가 있습니다. 어쨌든 고마워. – Barmar

+0

그러나 현재 광고 페이지를 살펴본 결과 스크립트는 비슷합니다. 그들은 '' – Barmar

답변

2

문서가 준비 상태를로드하는 경우 대화식이지만 본문 요소가 완전히 구문 분석되지 않았습니다. 로드되지 않은 요소에는 자식을 추가 할 수 없습니다. 오류가 발생하고 스크립트가 중지됩니다.

dochead.appendChild (새 스크립트);

빠른 수정은 body.onload 이벤트를 사용하여 함수를 실행하는 것입니다. 스크립트를 페이지의 맨 아래로 옮길 수는 있지만 Internet Explorer와 잘못된 브라우저를 포함하는 세계에서는 신뢰할 수 없다고 생각합니다.

+0

스크립트가 실행 중입니다. 내가 그것에 중단 점을 설정할 수 있으며 중단 점에서 중지됩니다. – Barmar

+0

호출중인 스크립트가 무엇을하는지 살펴야합니다. 어쩌면 그들이 document.write를하고있는 이유는 라인의 다음 스크립트가 document.write를하고 있기 때문입니다. 무답하지만 귀하의 질문에 대한 대안 솔루션은 myad.html에서 문서 쓰기를 사용하는 스크립트를 배치하십시오. document.write는 구문 분석하는 동안 작동하고 appendChild는 구문 분석 후에 document.write가 문서가로드 된 후 자료를 추가 할 수 없습니다. – Wayne

4

때문에 그들은 document.write() 사용 :

http://ads-by.madadsmedia.com/tags/22430/9194/async/160x600.js을 : 인라인에 적극적 "열기"문서, 거기 무슨 소지품 것이다 실행되지 않습니다

if (!window.ActiveXObject){ 
    document.write("<div style=\"text-align: center; margin: 0px auto; width:160px; height:600px; position:relative;\">"); 
// etc. 

document.write()합니다. 따라서 스크립트를 실행하면 사후로드로 컨텐츠를 덮어 씁니다.