2009-03-03 4 views
2

내가이 단순화 할 수있는 코드 조각이 : IE를 제외한 모든 브라우저에서외부 자바 스크립트에서 함수를 호출 할 때 IE가 실패합니다.

var s='' ; 

s += "<"+"script type=\"text/javascript\" src=\"http://somehost.com/scripts/FooFunctions.js\">\n"; 
s += "<"+"/script>" ; 
s += "<"+"script type=\"text/javascript\">\n"; 
s += "FooFunction(42, 'i love cats');\n"; 
s += "<"+"/script>" ; 

document.write(s) ; 

을, 이것은 당신이 예상대로 실행 - somehost.com/scripts/FooFunctions.js 작업에서 기능을 예상대로 .

Internet Explorer에서이 작업은 실패합니다.

인터넷 검색이 어려워 보입니다. 나는 가끔씩 같은 문제가 있지만 해결책이 없다는 것을 발견했다.

(이 외부 파일은 자바 스크립트이 방법에서 을 포함 할 필요가 유효한 이유는, 그리고 pgae는 <script src="http://somehost.com/scripts/FooFunctions.js">가 삽입 가질 수있다.)

것은 명확하게하기 위해, 질문 : 어떻게 내가 위의 코드 조각을 인터넷 익스플로러에서와 똑같이 작동하게 할 수 있습니까? 파이어 폭스?

답변

2

이 시도, 그것은 IE

스크립트가로드되기 전에 IE가 FooFunction를 호출처럼 보이는

function addJsFile(jsFileLocation){ 
    var script=document.createElement('script'); 
    script.type='text/javascript'; 
    script.src=jsFileLocation; 
    document.getElementsByTagName("head")[0].appendChild(script); 
} 
addJsFile("http://code.jquery.com/jquery-latest.pack.js"); 
setTimeout(function(){alert(jQuery);},1000); 
+0

DOM 주입 (여기에서하는 작업)에 의한 스크립트 포함이 스크립트 다운로드를 병렬 처리하지 않기 때문에 효과가있을 수 있습니다.이 스크립트는 순차적으로로드됩니다. 따라서 alert()에 도달하면 사용할 수 있습니다. –

+0

나는 실제로이 방법을 시도했지만 문제를 해결하지 못했지만 다시 시도 할 것입니다. – mozboz

0

에서 작동합니다. setTimeout("FooFunction(42, 'i love cats')", 1000);을 사용하여 테스트 할 수 있습니다. 1 초가 스크립트를로드하는 데 충분한 시간이라고 가정하면이 호출이 성공합니다.

당신이 때 스크립트로드 콜백을 제공 할 스크립트를로드 jQuery를 같은 프레임 워크를 사용할 수없는 경우, 당신은 FooFunction

+0

IE에서 onreadystatechange 핸들러 (AJAX와 유사)를 스크립트 태그에 추가하여로드 된시기를 알 수 있습니다. – some

0

으로 확인, setInterval 함께 자신을 해킹 할 수있을 것 곧 document.write 호출이 완료되면 두 번째 script 태그에서 함수가 실행됩니다. 외부 스크립트가 아직로드되었는지 여부에 관계없이 이것은 IE 문제 일뿐만 아니라 모든 브라우저에 영향을 미쳐야합니다. 외부 스크립트가 캐시되어있어 다른 브라우저에 영향을 미치지 않았습니까? 캐시를 지우고 다른 브라우저에서 다시 시도하면 어떻게됩니까?

어쨌든 이상적인 세상에서 스크립트 태그에는 .onload를 사용할 수 있어야하지만 99 %는 IE6의 스크립트 태그에서 실행되지 않는 onload에 문제가 있다는 것을 확신하기 때문에 윈도우 엘리먼트에 onload. 위와 같은 외부 js 파일을 포함하여 모든 스크립트가 다운로드 될 때까지 이벤트가 실행되지 않습니다.

관련 문제