2011-11-02 2 views
3

이것은 쉽게 풀 수있는 문제인 것처럼 보이지만 내 엉덩이를 걷어차는 것입니다.IE9 js로드 순서 및 JQuery

다음 간단한 예제는 IE9에서 오류를 생성합니다. 나는 IE9의 개발자 페이지를 사용하여 네트워크로드를 모니터링했으며 포함 된 javascript가로드되거나 평가되기 전에 IE가 로딩하고 바디의 스크립트를 실행하는 것처럼 보입니다.

나는 내가 해결 방법이 <meta charset="UTF-8" />

<html> 
<head> 
    <title>Demo of IE suckiness</title> 
    <script type='text/javascript' 
     src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'></script> 
    </head> 
    <body> 
This works in every browser but not IE9. IE gives the error: 
<pre> 
Line: 9 
Error: The value of the property '$' is null or undefined, not a Function object 
</pre> 

<script type="text/javascript" defer="defer"> 
$(document).ready(function(){ 
    alert("Must not be IE"); 
}); 
</script> 
</body> 
</html> 

<meta http-equiv="x-ua-compatible" content="IE8"/> 추가를 포함 답변을 검색을 통해 발견 된 모든 다양한 트릭을 시도했습니다. 준비된 스크립트를 <body onload="ready()">으로 옮기십시오. 그러나 이것이 IE9에서 고장났다는 것을 믿을 수 없습니다. 나는 틀린 일을해야하며 그냥 볼 수 없습니다.

+1

왜 "지연"을 사용합니까? $ (document) .ready는 문서가로드 될 때 실행될 것임을 의미합니다. –

+0

jquery 라이브러리가 다운로드되고 있는지 확인할 수 있습니까? 어떤 이유로 http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js가 차단되었을 수 있습니다. – fehays

+0

다운로드 중임을 확인했습니다. 문제는 페이지의 스크립트가 실행되기 전에로드되지 않는 것이 었습니다. "지연"은 먼저로드하지 않도록 시도하는 미친 시도였습니다. 나는 단지 말이 안되는 구만. 아래의 해결책은 모든 IE 설정을 재설정하는 것입니다. 보안 설정 등을 변경해야합니까? IE가 다운로드되지만 JQuery를로드하지 않는다는 것은 의미가 없습니다. – TrophyGeek

답변

2

나는 비슷한 문제가있었습니다. 나는 resetting all my IE9 settings로 고쳤다.
외부 페이지에서 jquery 로딩을 깨뜨릴 수있는 보안 또는 개인 정보 보호 기능을 구현한다고 생각합니다.

+0

와우. 승인. 그게 효과가 있었어! 어떻게 시도했는지 어떻게 알았습니까? 나는 그것에 시간을 보내고있다. 당연히 로컬 서버 (localhost)에서 실행하고 localhost 경로에서 jquery를로드하려고했지만 아무 것도 작동하지 않았습니다. – TrophyGeek

0

defer="defer"을 빠뜨리려고 했습니까?

+1

이것이 답이라면 왜 질문입니까? : D –

+0

아이디어를 가져 주셔서 감사합니다. 나는 그 조합을 시도했다. – TrophyGeek

0

Google의 호스팅 된 jQuery를 사용하지 않고 로컬로 호스팅하여 동일한 문제가 발생하여이를 해결했습니다.

+0

인사말 James. Stackoverflow에 오신 것을 환영합니다. 이미 응답 한 질문에 대한 응답을 제공 할 수 있습니다. 그거 아무 문제 없어. 정신은 지역 사회 구성원간에 서로 다른 경험을 나누는 것입니다. 잠시 시간을내어 FAQ를 읽으십시오. –

3

내가 아는 한 IE9는 전체 문서 (모든 이미지 & 관련 내용 포함)가로드되었을 때 $ .load() 만 실행합니다. 끔찍하지만 사실! 이에 대한 해결 방법은 다음과 같습니다.

  var docReady = { 
       actions:new Array(), 
       flag:0, 
       time:0, 
       period:10, 
       trigger:function() {this.flag=1}, 
       checkHandle:0, 
       check:function() { 
        this.time+=this.period; 
        if(this.flag) { 
         clearInterval(this.checkHandle); 
         for(i in this.actions) {this.actions[i]();} 
        } 
       }, 
       watch:function() { 
        this.checkHandle = setInterval(function() {docReady.check();},this.period); 
       }, 
       action:function(f) { 
        this.actions.push(f); 
       } 

      }; 

      docReady.watch(); 

실제로 더러운 것이지만 작동합니다. 이제 당신이 적합하다고 생각할 때마다 docReady.trigger()를 호출 할 수 있습니다. 적어도 페이지 끝 부분에서해야합니다. 또한 body onload로 호출 할 수 있습니다. docReady.action()으로 추가 한 함수는 첫 번째 트리거()가 발생했을 때 한 번만 실행됩니다.