[javascript] experts des erreurs souhaités :[:[

experts des erreurs souhaités :[:[ [javascript] - Programmation

Marsh Posté le 24-06-2002 à 16:31:45    

salut,
j'ai un système de navigation en Javascript pour mon site, avec des frames etc...
le blème est que parfois (et je n'arrive pas à trouver QUAND, mais en général quand dans la frame de contenu ya une erreur JS) bin ma navigation ne fonctionne plus,
mes targuette.location.href ne font plus rien, ou alors font des trucs sur certains frames et pas sur d'autres ...
je vois pas du tout comment je pourrais capturer les erreurs et comment continuer à naviguer sans que des erreurs du contenu influent sur le tout ?
bref
 
eske c possible qu'une erreur de script dans un des frames empêche la bonne exécution des actions dans un autre frame, ou alors .... avez vous des bons liens vers des gestions d'erruer JS ?
 
(note: ces erreurs dans la navigation n'existent que sur IE, j'ai testé sous mozilla et sur IE for mac etr ça passe )
 
merci c urgent en fait (livraison produit imminente :'( )

Reply

Marsh Posté le 24-06-2002 à 16:31:45   

Reply

Marsh Posté le 24-06-2002 à 17:30:08    

k666 a écrit a écrit :

je vois pas du tout comment je pourrais capturer les erreurs et comment continuer à naviguer sans que des erreurs du contenu influent sur le tout ?


try
{
  ... ton code javascript
}
catch (e)
{
  ... e est un objet contenant l'erreur.
  for (i in e)
  {
     alert(i + eval('e.' + i));
  }
}
 
tu rajoutes ça dans les bouts de code qui te semblent poser problème et tu regardes ce que tu obtiens.
 
si tu as une url, je veux bien tester ta page ...

Reply

Marsh Posté le 24-06-2002 à 18:26:44    

ça marche pas :(
 
mon script est à la racine d'un frameset,
ça marche pas ça me claque aucune erreur et c bien ça le problème,
il y a seulement une des frames à reloader qui se reloade pas, et c en général celle dans laquelle ya eu une erreur,
pourtant la navigation n'est pas dans cette frame, je la reloade rechange depuis l'extérieur :(

Reply

Marsh Posté le 24-06-2002 à 19:04:12    

sisi ça marche. mais vu la profusion de détails que tu donnes, j'ai du mal à voir où le problème pourrait être.

Reply

Marsh Posté le 25-06-2002 à 09:49:03    

ouais
bin en fait je donne des détails parceq'uils sont très importants:
 
un frameset contenant 3 frames et un script de navigation,
il y a une seule des frames qui, parfois, ne veut plus rechanger son location.href et ne pète aucune erreur à la gueule, simplement elle change pas l'url (alors que toutes les autres le font) ....
 
les détails ont donc une valeur je crois :'(

Reply

Marsh Posté le 25-06-2002 à 09:52:00    

k666 t'as pas senti comme une touche de sarcasme dans le s propos de youdontcare??
des details c bien mais le code source c'est mieux pour depanner...


---------------
All we need is a soul revolution
Reply

Marsh Posté le 25-06-2002 à 12:58:36    

okaie
mais j'avoue: ya bcp de php derrière ;)
c parti!
 

Code :
  1. <script language="Javascript">
  2. // état actuel de la navigation
  3. var current_activity_id = <?= $activity_id ?>;
  4. var current_offer_id = <?= $offer_id ?>;
  5. var current_root_offer_id = <?= $root_offer_id ?>;
  6. var current_user_id = <?= $user_id ?>;
  7. var player_ready = false;
  8. var debug = true;
  9. var tries = 0;
  10. <?
  11. if ($_GET['undocked'] == "y" )
  12. {
  13. echo "var undocked = \"y\";";
  14. }
  15. else
  16. {
  17. echo "var undocked = \"n\";";
  18. }
  19. ?>
  20. var obj_infobar;
  21. var obj_topbar;
  22. var obj_navbar;
  23. var obj_content;
  24. function showHelp()
  25. {
  26. var helpwindow = window.open("" );
  27. helpwindow.document.write("<html><body>ici aide, non dispo...</body></html>" );
  28. }
  29. function objExists(which)
  30. {
  31. if ( (which != null) )
  32. {
  33.  return true;
  34. }
  35. else
  36. {
  37.  return false;
  38. }
  39. }
  40. function dockOrUndock()
  41. {
  42. if (undocked == "y" )
  43. {
  44.  obj_navbar.close();
  45.  this.location = "./?activity_id=" + current_activity_id + "&offer_id=" + current_offer_id + "&root_offer_id=" + current_root_offer_id + "&user_id=" + current_user_id ;
  46. }
  47. else
  48. {
  49.  this.location = "./?activity_id=" + current_activity_id + "&offer_id=" + current_offer_id + "&root_offer_id=" + current_root_offer_id + "&user_id=" + current_user_id + "&undocked=y" ;
  50. }
  51. }
  52. function goHome()
  53. {
  54. if ( (undocked == "y" ) && objExists(obj_navbar) )
  55. {
  56.  obj_navbar.close();
  57. }
  58. this.location = "../../details/?root_offer_id="+current_root_offer_id;
  59. }
  60. function goFirst()
  61. {
  62. obj_infobar.location.href = "infobar.php?activity_id=" + current_activity_id + "&offer_id=" + current_offer_id + "&root_offer_id=" + current_root_offer_id + "&user_id=" + current_user_id+ "&action=first";
  63. }
  64. function goPrevious()
  65. {
  66. obj_infobar.location.href = "infobar.php?activity_id=" + current_activity_id + "&offer_id=" + current_offer_id + "&root_offer_id=" + current_root_offer_id + "&user_id=" + current_user_id+ "&action=previous";;
  67. }
  68. function goNext()
  69. {
  70. obj_infobar.location.href = "infobar.php?activity_id=" + current_activity_id + "&offer_id=" + current_offer_id + "&root_offer_id=" + current_root_offer_id + "&user_id=" + current_user_id+ "&action=next";
  71. }
  72. function reDir(obj,newurl)
  73. {
  74. if( objExists(obj) )
  75. {
  76.  obj.location.replace(newurl);
  77.  tries = 0;
  78.  return true;
  79. }
  80. else if ( tries < 10 )
  81. {
  82.  tries++;
  83.  setTimeout("reDir("+obj+","+newurl+" );","200" );
  84. }
  85. else
  86. {
  87.  return false;
  88. }
  89. }
  90. function gotoActivity(activity_id,offer_id)
  91. {
  92. try
  93. {
  94.  if (player_ready)
  95.  {
  96.   current_activity_id = activity_id;
  97.   current_offer_id = offer_id;
  98.   var querystring = "activity_id=" + current_activity_id + "&offer_id=" + current_offer_id + "&root_offer_id=" + current_root_offer_id + "&user_id=" + current_user_id + "&expand=" + current_offer_id + "&undocked=" + undocked;
  99.   reDir(obj_content,"content.php?" + querystring);
  100.   reDir(obj_topbar,"topbar.php?" + querystring);
  101.   reDir(obj_navbar,"navbar.php?" + querystring + "#"+current_offer_id+"-"+current_activity_id);
  102.  }
  103. }
  104. catch (e)
  105. {
  106.  for (i in e)
  107.  {
  108.      alert(i + eval('e.' + i));
  109.  }
  110. }
  111. }
  112. function tagActivity(status)
  113. {
  114. if (objExists(obj_infobar))
  115. {
  116.  obj_infobar.location.href = "platform.php?activity_id=" + current_activity_id + "&offer_id=" + current_offer_id + "&root_offer_id=" + current_root_offer_id + "&user_id=" + current_user_id+ "&status="+status;
  117.  return true;
  118. }
  119. else
  120. {
  121.  return false;
  122. }
  123. }
  124. function doLoad()
  125. {
  126. obj_infobar = eval("infobar" );
  127. obj_topbar = eval("topbar" );
  128. obj_navbar = eval("navbar" );
  129. obj_content = eval("content" );
  130. if ( objExists(obj_infobar) && objExists(obj_topbar) && objExists(obj_navbar) && objExists(obj_content) )
  131. {
  132.  player_ready = true;
  133.  tries = 0;
  134. }
  135. else if ( tries < 10 )
  136. {
  137.  tries++;
  138.  setTimeout("doLoad();","200" );
  139. }
  140. else
  141. {
  142.  player_ready = false;
  143.  return false;
  144. }
  145. }
  146. function blank()
  147. {
  148. return "<html></html>";
  149. }
  150. function preloaded()
  151. {
  152. window.status = "ok";
  153. }
  154. </script>
  155. <?
  156. if ($_GET['undocked'] == "y" )
  157. {
  158. ?>
  159. <script language="javascript">
  160. var navbar = window.open("navbar.php?activity_id=<?= $activity_id ?>&offer_id=<?= $offer_id ?>&root_offer_id=<?= $root_offer_id ?>&user_id=<?= $user_id ?>&action=login&undocked=y#<?= $offer_id ?>-<?= $activity_id ?>","","height=400,width=300,status=no,toolbar=no,menubar=no,location=no,resizable,scrollbars" );
  161. </script>
  162. <frameset rows="0,50,*" frameborder="no" framespacing="0" onload="javascript:doLoad();">
  163.  <frame name="infobar" src="blank();">
  164.  <frame name="topbar" src="topbar.php?activity_id=<?= $activity_id ?>&offer_id=<?= $offer_id ?>&root_offer_id=<?= $root_offer_id ?>&user_id=<?= $user_id ?>&action=login">
  165.  <frame name="content" src="content.php?activity_id=<?= $activity_id ?>&offer_id=<?= $offer_id ?>&root_offer_id=<?= $root_offer_id ?>&user_id=<?= $user_id ?>&action=login">
  166. </frameset>
  167. <?
  168. }
  169. else
  170. {
  171. ?>
  172. <frameset rows="0,50,*" frameborder="no" framespacing="0" onload="javascript:doLoad();">
  173.  <frame name="infobar" src="blank();" frameborder="no">
  174.  <frame name="topbar" src="topbar.php?activity_id=<?= $activity_id ?>&offer_id=<?= $offer_id ?>&root_offer_id=<?= $root_offer_id ?>&user_id=<?= $user_id ?>&action=login" frameborder="no">
  175.  <frameset cols="250,*" frameborder="no">
  176.   <frame name="navbar" src="navbar.php?activity_id=<?= $activity_id ?>&offer_id=<?= $offer_id ?>&root_offer_id=<?= $root_offer_id ?>&user_id=<?= $user_id ?>&action=login" frameborder="no">
  177.   <frame name="content" src="content.php?activity_id=<?= $activity_id ?>&offer_id=<?= $offer_id ?>&root_offer_id=<?= $root_offer_id ?>&user_id=<?= $user_id ?>&action=login" frameborder="no">
  178.  </frameset>
  179. </frameset>
  180. <?
  181. }
  182. ?>
  183. </html>

Reply

Marsh Posté le 25-06-2002 à 13:00:18    

la frame dans laquelle se trouvera le contenu est celle instanciée par obj_content
 
 
 
la fonction qui chie, et que je suis entrain de bosser, c'est:
 

Code :
  1. function gotoActivity(activity_id,offer_id)
  2. {
  3. try
  4. {
  5.  if (player_ready)
  6.  {
  7.   current_activity_id = activity_id;
  8.   current_offer_id = offer_id;
  9.   var querystring = "activity_id=" + current_activity_id + "&offer_id=" + current_offer_id + "&root_offer_id=" + current_root_offer_id + "&user_id=" + current_user_id + "&expand=" + current_offer_id + "&undocked=" + undocked;
  10.   reDir(obj_content,"content.php?" + querystring);
  11.   reDir(obj_topbar,"topbar.php?" + querystring);
  12.   reDir(obj_navbar,"navbar.php?" + querystring + "#"+current_offer_id+"-"+current_activity_id);
  13.  }
  14. }
  15. catch (e)
  16. {
  17.  for (i in e)
  18.  {
  19.      alert(i + eval('e.' + i));
  20.  }
  21. }
  22. }


 
 
 

Reply

Marsh Posté le 25-06-2002 à 13:00:50    

bref ...
j'ai rajouté des try catch etc... faites semblant qu'ils sont pas là, paske ça fait rien du tout :'(


Message édité par k666 le 25-06-2002 à 13:01:20
Reply

Marsh Posté le 25-06-2002 à 14:03:41    

try fo pas le rajouter c simplement youdontcare qui te dis d'essayer sa technique...
je pas mate tt le code pour l'instant


---------------
All we need is a soul revolution
Reply

Marsh Posté le 25-06-2002 à 14:03:41   

Reply

Marsh Posté le 25-06-2002 à 14:33:49    

okaie, version super simplifiée:
 

Code :
  1. function gotoActivity(activity_id,offer_id)
  2. {
  3.   obj_content.location.href = "content.php?" + querystring;
  4.   obj_navbar.location.href = "navbar.php?" + querystring;
  5.   obj_topbar.location.href = "topbar.php?" + querystring;
  6. }
  7. function doLoad()
  8. {
  9.   obj_infobar = eval("infobar" );
  10.   obj_topbar = eval("topbar" );
  11.   obj_navbar = eval("navbar" );
  12.   obj_content = eval("content" );
  13. }
  14. </script>


<frameset rows="0,50,*" frameborder="no" framespacing="0" onload="javascript:doLoad();">  
 <frame name="infobar" src="blank();" frameborder="no">  
 <frame name="topbar" src="topbar.php?activity_id=<?= $activity_id ?>&offer_id=<?= $offer_id ?>&root_offer_id=<?= $root_offer_id ?>&user_id=<?= $user_id ?>&action=login" frameborder="no">  
 <frameset cols="250,*" frameborder="no">  
  <frame name="navbar" src="navbar.php?activity_id=<?= $activity_id ?>&offer_id=<?= $offer_id ?>&root_offer_id=<?= $root_offer_id ?>&user_id=<?= $user_id ?>&action=login" frameborder="no">  
  <frame name="content" src="content.php?activity_id=<?= $activity_id ?>&offer_id=<?= $offer_id ?>&root_offer_id=<?= $root_offer_id ?>&user_id=<?= $user_id ?>&action=login" frameborder="no">  
 </frameset>  
</frameset>
 
 
 
donc:
 
à certains moments, quand la frame centrale comporte (je crois) certaines erreurs etc .... la navigation ne se fait plus, la frame centrale n'est plus rechargée :(


Message édité par k666 le 25-06-2002 à 14:35:36
Reply

Marsh Posté le 25-06-2002 à 14:49:24    

c'est comme si la propriété de l'objet obj_content ne répondait plus à location.href ou alors la cible est ailleurs :[

Reply

Marsh Posté le 25-06-2002 à 18:37:31    

sisi faut bien mettre le try ...
 
ça peut venir de ton setTimeout() qui éxécute du code incorrect, du fait que tu essayes d'accéder à des variables pas encore 'nées' (avant le onload()) ou mortes. ton obj_content ne supporte peut-être pas le eval() du chargement ... d'ailleurs ce machin n'est compatible qu'ie, vaut mieux utiliser document.getElementById().
 
* regarde à quel moment le panneau d'erreur jaune apparaît en bas à gauche dans ie
 
* le mieux ce serait quand même que tu foutes le code sur une page html et que tu files le lien. pas TOUT le code, tu enlèves tout ce qui marche jusqu'à ce que tu trouve une erreur reproductible que tu ne piges pas / ininterceptable avec try & catch.

Reply

Marsh Posté le 25-06-2002 à 18:47:38    

euh
c très chaud paske c'est une application que je suis entrain de développer et je peux malehureusement pas donner accès à tout ça en ligne :(
 
et à aucun moment n'apparait une erreur en bas à gauche,
le fait que ça s'arrête de fonctionner n'est pas dû à une erreur durable ..
le truc marche nickel sous MOZILLA 1.0 et marche nickel sous MAC/IE,
ce n'est que sous winIE que, dans certaines conditions maheureusement irréproductibles, ça s'arrête de marcher,
mais ça ne s'arrête pas totalement,
il y a uniquement la FRAME potentiellement dangereuse (celle qui comporte le contenu hétérogène) qui arrête de changer son HREF, sans claquer aucune erreur ni rien, c'est comme si'lobjet continuait d'exister mais devenait un fantôme,
c'est pour ça que c'est très chiant à expliquer :(:(:(
 
bref,
le truc c'est que j'aimerais trouver un moyen pour changer qd me^me cette URL du frame de contenu, mais apparemment ya pas moyen :(

Reply

Marsh Posté le 25-06-2002 à 19:25:48    

ça te dirait pas de tester donc :
 
  function gotoActivity(activity_id,offer_id)  
  {  
   try  
   {
      obj_content.location.href = "content.php?" + querystring;  
      obj_navbar.location.href = "navbar.php?" + querystring;  
      obj_topbar.location.href = "topbar.php?" + querystring;  
   }
   catch(e)
   {
      alert('ERREUR';);
   }
 
  }  
 
?

Reply

Marsh Posté le 25-06-2002 à 22:02:37    

c'est ce que j'ai fait, cf. post nº7 :'(

Reply

Marsh Posté le 25-06-2002 à 22:17:24    

he bien je suis à court d'idées ... :D

Reply

Marsh Posté le 25-06-2002 à 23:18:20    

sinon vous connaissez pas un forum ou je puisse poster ?
 :kaola:  
 
 :ange:

Reply

Marsh Posté le 27-06-2002 à 12:16:04    

bon merci à tous ceux qui ont participé :)
 
j'ai corrigé mon bug en ré-évaluant les objets à chaque action, car en effet comme je le pensais, la fenêtre de contenu devenait zombie dans certains cas/erreurs/bugs de IE pour windows, et donc en réévaluant l'objet, elle retrouvait bien sa fenêtre,
c'est pour ça que ça pétait pas d'erreurs à la gueule, paske ça changeait bien d'url dans une fenêtre inexistante :(
j'ai mis du temps à trovuer, et j'ai compris aussi que le try catch, c pas encore ça ;)

Reply

Marsh Posté le 27-06-2002 à 12:25:33    

j'ai pas tout lu (du tout), j'espère que ce n'st pas trop hors sujet...
 
(sans vous prendre pour des newbies) Le débogueur de js de Netscape fait bien son travail et c'est bien pratique.
Tu tapes "javascript:" dans la barre d'url, il t'ouvres une autre fenêtre qui t'indique toutes les erreurs de la page en cours.


---------------
...oups kernel error...
Reply

Marsh Posté le 27-06-2002 à 12:34:05    

ouais je sais je m'en sers souvent,
mais là c'était un bug 100% ie :(
et leur débogueur est mal foutu, et l'erreur n'était pas détectée ;)

Reply

Marsh Posté le 27-06-2002 à 12:52:31    

ha ok :)
c'est encore pire ces erreurs là :lol:
 
haaa, js qd tu nous tiens...


---------------
...oups kernel error...
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed