2010-01-25 2 views
0

http://www.rhino.com/shop/product/the-monkees-the-birds-the-bees-the-monkees-boxed-set 페이지 하단에 다음과 이전 버튼이 표시됩니다.이 버튼은 탐색 버튼이지만 파이어 폭스에서는 잘 작동하지만 페이지에서 스타일이 제거되면 페이지에서 스타일이 제거됩니다 클릭!. 문제의 원인이 무엇인지 알려주십시오. 난 이미 디버깅 :(내가 IE8에 디버깅ie7/8에서 자바 스크립트 오류를 ​​수정하는 방법은 무엇입니까?

답변

1

, 나는 여기 런타임 오류를 볼 시간을 보냈다 :

cd=new Date(); 

가장 가능성이 HTML이 조각과 일치하지 않습니다

<li id="cd" class=""><a href="#productInfo-cd">CD</a></li> 

IE는 '유용하게도'전역 변수로 ID가있는 요소를 실행하므로 은 실제로 <li> 요소이며, new Date()을 할당하면 IE는 그것을 좋아하지 않습니다. 정상적으로 cd를 처리하면 완벽하게 문제가되지 않습니다 지역 변수 가능하지만 런타임 오류가 발생하지 않습니다.

이 코드 조각은 익명의 기능에 속합니다.이 기능은 실제로 불쾌합니다 (아래 참조). 그러나 해결책은 간단합니다. 적절한 함수를 작성하고 변수를 선언하십시오. 익명 함수는 다음과 같이 정상 선언 변수에 하나 개의 라인을 사용했을 경우

var cd, dc, ...other variable names... ; 

하고 함수 내부의 cd 변수가 지역 변수가 아닌 글로벌 언급했을 있기 때문에, 잘 일한 것 IE가 li 요소를 참조하는 것으로 생각하는 cd 요소는 id="cd"입니다.

이제는이 페이지의 많은 문제 중 하나 일 수 있습니다. 하지만 IE에서 발생한 첫 번째 오류가 나머지 스크립트 실행을 중단했다고 가정합니다. 일부 스크립트가 작동하지 않는 이유는 무엇입니까?

function anonymous(t, z, y) { 
    dc=new Date('1/1/2000');f=15;ne=8; 
    if(dc.getDay()!=6||dc.getMonth()!=0){ 
    return'Data Not Available' 
    }else{; 
    z=parseInt(z); 
    if(y=='2009'){f=8;ne=1}; 
    gmar=new Date('3/1/'+y); 
    dsts=f-gmar.getDay(); 
    gnov=new Date('11/1/'+y); 
    dste=ne-gnov.getDay(); 
    spr=new Date('3/'+dsts+'/'+y); 
    fl=new Date('11/'+dste+'/'+y); 
    cd=new Date(); 
    if(cd>spr&&cd<fl){ 
     z=z+1 
    }else{ 
     z=z 
    }; 
    utc=cd.getTime()+(cd.getTimezoneOffset()*60000); 
    tz=new Date(utc + (3600000*z)); 
    thisy=tz.getFullYear(); 
    var days=['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']; 
    if(thisy!=y){ 
     return'Data Not Available' 
    }else{; 
     thish=tz.getHours(); 
     thismin=tz.getMinutes(); 
     thisd=tz.getDay(); 
     var dow=days[thisd];var ap='AM';var dt='Weekday'; 
     var mint='00'; 
     if(thismin>30){mint='30'} 
     if(thish>=12){ap='PM';thish=thish-12}; 
     if (thish==0){thish=12}; 
     if(thisd==6||thisd==0){dt='Weekend'}; 
     var timestring=thish+':'+mint+ap; 
     var daystring=dow; 
     var endstring=dt; 
     if(t=='h'){ 
      return timestring} 
     if(t=='d'){ 
      return daystring};if(t=='w'){return endstring}}}; 
    } 

여기서 디버깅은 약간의 문제입니다. 내 콜 스택은 다음과 같습니다 :

anonymous JScript 
s_doPlugins JScript 
    anonymous function JScript 
global code JScript 

맨 위는 실제 오류가 발생하는 곳입니다.

이 모든 일이 일어나고 루트가 여기에 있습니다 : 어떻게 든

/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/ 
    var s_code=s.t();if(s_code)document.write(s_code) 

, 여기에서, s_doPlugins는 문제의 원인이되는 익명 함수의 실제 호출을 포함하는라고합니다. s_doPluginss_code.js에 위치합니다. 내가 그 단계별 경우에, 나는 문제가이 줄 것을 알게 : s_code.js 라인 (38)

s.prop9=s.getTimeParting('h','-5','2008'); // Set hour 

이다. 조금 더 주위를 파고, 나는 그것이 실제로 사용이 플러그인을 찾을 :

/* 
* Plugin: getTimeParting 1.3 - Set timeparting values based on time zone 
*/ 
s.getTimeParting=new Function("t","z","y","" 
+"dc=new Date('1/1/2000');f=15;ne=8;if(dc.getDay()!=6||" 
...more crap here... 

이 내가 아마에 s.getTimeParting()에 대한 모든 호출을 주석 것 빠른 수정으로

s_code.js 라인 (95)에있다 s_doPlugins()s_code.js에 입력하고 문제가 해결되는지 확인하십시오.그런 다음, 길고 딱딱하지만 고상한 택은이 혼란에서 합당한 것을 쫓아 내고있다.))

+0

정보를 제공해 주신 데 대해 감사드립니다. 그러나이 익명 방식은 어디에서 찾을 수 있습니까? –

+0

@Microgen이 코드는 쥐의 둥지입니다. 하지만 노력하겠습니다. 나는 곧 나의 대답을 업데이트하고있다. –

+0

덕분에 많이 고마워, 내가 이걸 고치기 위해 무엇을 바꿔야하는지 알려줘. –

1

나는이 사이트를 노골적으로 찾았으며 문제가 내 사이트 ID가 "utc"인 div를 사용하고 있음을 발견했다. s_code JS. 'UTC'는 시간과 관련되어 있기 때문에, 나는 존재하지 않는다면 다른 것에 의존하는 조잡한 JS가 있다고 가정 할 수 있습니다!

관련 문제