2010-01-25 3 views
0

si vous ouvrez la page: http://www.rhino.com/shop/product/the-monkees-the-birds-the-bees-the-monkees-boxed-set vous verrez au bas de la page, un bouton suivant et précédent, ce sont des boutons de navigation, ils fonctionnent très bien dans firefox mais c'est à dire le style est retiré de la page quand ils sont cliqué!. veuillez donner des conseils sur ce qui pourrait être la cause du problème. Je l'ai déjà passé des heures de débogage :(comment réparer erreur javascript dans ie7/8?

Répondre

1

Quand je debug sur IE8, je vois une erreur d'exécution ici:

cd=new Date(); 

Très probablement cela ne concorde pas avec ce morceau de HTML:

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

IE "utilement" lance des éléments avec un identifiant comme variables globales Donc cd est un élément <li>, et IE ne l'aime pas si vous lui attribuez new Date(), ce serait parfaitement bien si IE traitait cd comme un normal variable locale capable, mais pas, d'où l'erreur d'exécution.

Ce code est à l'intérieur d'une fonction anonyme qui est vraiment méchante (voir ci-dessous). Mais la solution est simple: il suffit d'écrire les fonctions appropriées et de déclarer vos variables. Si la fonction anonyme aurait utilisé une ligne dans le top déclarerait des variables comme celui-ci:

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

il aurait travaillé très bien, parce que la variable cd dans la fonction aurait englobé la variable locale, et non mondial cd élément qui selon IE fait référence à l'élément li avec id="cd".

Maintenant, il est tout à fait possible que ce n'est qu'un des nombreux problèmes avec cette page. Mais je suppose que la première erreur rencontrée par IE a arrêté l'exécution du reste de votre script, ce qui explique pourquoi certaines d'entre elles n'ont pas fonctionné.

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}}}; 
    } 

Maintenant, déboguer d'où cela vient est un peu un problème. Mon callstack lit:

anonymous JScript 
s_doPlugins JScript 
    anonymous function JScript 
global code JScript 

Le premier est où l'erreur réelle se produit.

La racine où tout cela est passe est ici:

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

D'une certaine façon, d'ici, s_doPlugins est appelé qui contient l'appel réel à la fonction anonyme qui est à l'origine du problème. Il semble que s_doPlugins se trouve au s_code.js. Si je fais un pas à travers cela, je trouve que le problème est dans cette ligne:

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

qui est la ligne 38 du s_code.js. Avec un peu plus farfouillé, je trouve qu'il est actuall ce plugin:

/* 
* 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... 

Ceci est à la ligne 95 dans s_code.js

Comme une solution rapide, je ne serais probablement commenter tous les appels à s.getTimeParting() dans s_doPlugins() dans s_code.js et voir si cela résout votre problème.Ensuite, le long et dur, mais noble taks reste de sortir quelque chose de sensible de ce gâchis :))

+0

merci pour vos informations, mais où puis-je trouver cette méthode anonyme, dans quelle page? –

+0

@Microgen, ce code est un nid de rat. Mais je vais faire un effort. Je vais mettre à jour ma réponse rapidement: –

+0

merci beaucoup, s'il vous plaît laissez-moi savoir ce que je dois changer pour résoudre ce problème –

1

J'ai trouvé cela exaspérant et a découvert que le problème était mon site en utilisant un div avec l'ID "utc", qui se heurte à le s_code JS. 'UTC' est lié au temps, donc je ne peux que supposer qu'il y a du JS bâclé qui se fonde sur quelque chose d'autre s'il est présent!

Questions connexes