2009-02-26 1 views
2

내 웹 사이트 중 하나에서 'Facelift 1.2'라는 자바 스크립트를 사용하고 있으며 Safari 3, 4b 및 Opera, OmniWeb 및 Firefox에서 스크립트가 작동하지만 모든 IE 버전에서는 작동하지 않습니다. 하지만 작동하는 브라우저에서도 다음과 같은 오류가 발생합니다. 해독 할 수 없습니다.자바 스크립트 : '개체 필요'오류. 나는 그것을 해독 할 수 없다. 너는 할수 있니?

Javascript로 더 많은 경험을 할 수있는시기에 어쩌면 - 내가 할 수있을 것입니다.하지만 지금은 여러분 중 일부에게 물어볼 줄 알았습니다. Firebug Console Log http://img100.imageshack.us/img100/3636/err3.png

: IE Error Pop Up http://img21.imageshack.us/img21/3651/err2.png

다음 파이어 폭스 3.0.6에서 방화범 콘솔에서이다 :

다음 Interet 익스플로러 6, 7 및 8 페이지를 테스트 내가 IETester에서 얻을 오류 팝업입니다

웹 사이트 : http://www.457cc.co.nz/index.php 도움이 될 경우에 실제로 언급 된 문제를 확인하는 데 도움이됩니다.

는 I도 620에 대응 어떤 라인업 보았다되는 : "라인 (76)"이다 코드합니다 (flir.js 찍은)의 블록의 일부

this.isCraptastic = (typeof document.body.style.maxHeight=='undefined'); 

:

// either (options Object, fstyle FLIRStyle Object) or (fstyle FLIRStyle Object) 
,init: function(options, fstyle) { // or options for flir style 
    if(this.isFStyle(options)) { // (fstyle FLIRStyle Object) 
     this.defaultStyle = options; 
    }else { // [options Object, fstyle FLIRStyle Object] 
     if(typeof options != 'undefined') 
      this.loadOptions(options); 

     if(typeof fstyle == 'undefined') { 
      this.defaultStyle = new FLIRStyle(); 
     }else { 
      if(this.isFStyle(fstyle)) 
       this.defaultStyle = fstyle; 
      else 
       this.defaultStyle = new FLIRStyle(fstyle); 
     } 
    } 

    this.calcDPI(); 

    if(this.options.findEmbededFonts) 
     this.discoverEmbededFonts(); 

    this.isIE = (navigator.userAgent.toLowerCase().indexOf('msie')>-1 && navigator.userAgent.toLowerCase().indexOf('opera')<0); 
    this.isCraptastic = (typeof document.body.style.maxHeight=='undefined'); 

    if(this.isIE) { 
     this.flirIERepObj = []; 
     this.flirIEHovEls = []; 
     this.flirIEHovStyles = [];  
    } 
} 

전체 스크립트는 내 서버로 볼 수 있습니다 : http://www.457cc.co.nz/facelift-1.2/flir.js

난 그냥 어디 모른다 특히 IE에만 ​​영향을 주지만 나머지는 작동하기 때문에 오류를 찾기 시작할 수 있습니다. 어쩌면 너희들에게 생각이 있을지 모른다. 나는 그 (것)들을 듣는 것을 싶을.

읽어 주셔서 감사합니다. Jannis

추신 :

JavaScript - http://www.457cc.co.nz/index.php 
Inline script thread 
Error: 
name: TypeError 
message: Statement on line 620: Cannot convert undefined or null to Object 
Backtrace: 
    Line 620 of linked script http://www.457cc.co.nz/facelift-1.2/flir.js 
        document.body.appendChild(test); 
    Line 70 of linked script http://www.457cc.co.nz/facelift-1.2/flir.js 
      this.calcDPI(); 
    Line 2 of inline#1 script in http://www.457cc.co.nz/index.php 
      FLIR.init(); 
stacktrace: n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace' 

답변

7

내가 tvanfosson에 동의 - 페이지가 너무 document.body이 아직 정의되지 않은,로드가 완료되기 전에 init()를 호출하고 있기 때문에 당신이 오류가 발생하고있는 이유는 매우 가능성이 높습니다.

<script type="text/javascript"> 
    FLIR.init({ path: 'http://www.457cc.co.nz/facelift-1.2/' }); 
    FLIR.auto(); 
</script> 

가 더 좋은 문서의 ready 이벤트에 초기화를 첨부해야한다 : 당신이 링크 된 페이지에서

, 당신은 단지 닫는 HTML 태그 이전 페이지 (하단에 다음 코드를 이동해야합니다 이 방법을 사용하면 자바 스크립트를 파일의 맨 아래로 이동할 필요가 없습니다.사용 JQuery와 :

$(document).ready(function(){ 
    FLIR.init({ path: 'http://www.457cc.co.nz/facelift-1.2/' }); 
    FLIR.auto(); 
}); 

More on jquery's document.ready event »

+0

고맙습니다. 매력처럼 작동합니다! 어제 문서 준비 문을 포함하는 간단한 방법으로 6 시간을 낭비했다는 것을 믿을 수 없습니다. – Jannis

+0

문제 없습니다. 모든 자바 스크립트 닌자는 한 번 "페이지로드 전에 DOM에 액세스하는 중"오류로 인해 어려움을 겪었습니다. 꽤 일반적입니다. – Triptych

0

편집 대답 문맥 왼쪽 :이 오페라의 오류 콘솔 보고서는 것입니다. 올바른 해결 방법은 @ Triptych (허용) 답변을 참조하십시오.

제 제안은 자바 스크립트를 마크 업 끝에 포함시키는 것입니다. 내가 무슨 일이 일어나고 생각 DOM은 완전히로드되기 전에 따라서 document.body null로 maxHeight 스타일 속성을 결정하는 참조하려고하면 코드가 실행되고있다. 마크 업 끝까지 자바 스크립트를 포함 시키면 문서의 본문이 최소한로드되어이 특정 오류를 피할 수 있습니다.

... rest of html.... 

    <script type='text/javascript' 
      src='http://www.457cc.co.nz/facelift/flir.js'> 
    </script> 
</body> 
</html> 
+0

거의. 파일을 포함 시키면 실제로 DOM에 액세스하지 않습니다. 그는 실제로 응답을 일으키는 init 스크립트를 실행하는 스크립트 블록을 페이지에 가지고 있습니다. 내 대답을 보라. – Triptych

+0

답장을 보내 주셔서 감사합니다. 나는 언젠가 페이지 로딩과 관련이 있다는 것을 알아 냈을 것입니다. – Jannis

+0

@Triptych - 나는 그저 오류로 가고있었습니다. 실제로 그의 페이지를 보지 않았다. 좋은 캐치. 나는 당신이 그것을 참고하기 때문에 문맥을 위해 나의 응답을 여기에서 남겨 둘 것이다. +1. – tvanfosson

0

는 .NET 프레임 워크 (V2)를 설치하고 문제를 해결.

관련 문제