Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1432 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Palier au manque de Firebug sous IE et/ou Opera

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Palier au manque de Firebug sous IE et/ou Opera

n°1481597
gatsu35
Blablaté par Harko
Posté le 25-11-2006 à 10:05:33  profilanswer
 

Certains d'entre-vous connaissent Firebug qui est une extension firefox extrêmement utile et qui contient une console.

 

Pour faire du debugage JS, il m'arrive souvent de faire du debug à coup de alert(), maintenant avec firebug il suffit juste de faire un simple

Code :
  1. console.log("ma string ou mon objet ou ma variable" )


Et le tour est joué.

 

Pour palier au manque de console sous IE j'ai codé un truc un peu à l'arrache hier. J'ai eu l'idée quand un gus avait codé un truc du même genre mais qui s'ouvrait dans une popup. Et qui ne permettait que le console.log.
Mais, les popups c'est le maaaaalllll, et c'est killé par la plupart des navigateurs

 

Donc sous IE vous pouvez comme sous Firebug faire :
console.log("pouet" );
console.time("nomdutimer" ) <== lance un temp "nom du timer". (utile pour regarder à quel vitesse s'éxécute un script).
console.timeEnd("nomdutimer" ) <== affiche le temps d'éxécution. (idem pour lire le temps à la fin)

 

voici le code de la console. J'y ai rajouté une barre de saisie pour taper des fonctions dans la page et voir le résultat.

 
Code :
  1. if (!window.console) {
  2. var console= {
  3.     timers: {},
  4.  beforeLoadLogs:[],
  5.  console:null,
  6.  runField:null,
  7.  create:function() {
  8.   if (console.console) return;
  9.   var ie = document.all && window.print && !window.opera;
  10.   var subcons = document.body.insertBefore(document.createElement('form'),document.body.firstChild);
  11.   subcons.onsubmit = function() {console.eval(); return false;}
  12.   subcons.action = "javascript:void(0);";
  13.   with(subcons.style) {
  14.    margin="0"; padding="0";
  15.   }
  16.   var subconsInp = subcons.appendChild(document.createElement(ie ? '<input type="text">' : 'input'));
  17.   if (!ie) subconsInp.type='text';
  18.   with(subconsInp.style) {
  19.    width = "95%";
  20.    padding = '2px 4px';
  21.    border = '1px solid #000';
  22.    background = '#fff';
  23.   }
  24.   var subconsSubmit = subcons.appendChild(document.createElement(ie ? '<input type="submit">' : 'input'));
  25.   if (!ie) subconsSubmit.type='submit';
  26.   with (subconsSubmit.style) {
  27.    position = 'absolute';
  28.    visibility = 'hidden';
  29.    top = '0';
  30.    left = '0';
  31.   }
  32.   var cons = document.body.insertBefore(document.createElement('div'),document.body.firstChild);
  33.   with (cons.style) {
  34.    height = '150px';
  35.    background = '#fff';
  36.    overflow = 'auto';
  37.    border = '1px solid #000';
  38.    textAlign = 'left';
  39.    padding = '5px';
  40.    fontFamily = 'Verdana';
  41.    fontSize = '11px';
  42.    color = '#000';
  43.   }
  44.   console.console = cons;
  45.   console.runField = subconsInp;
  46.  },
  47.  createAfterLoading:function() {
  48.   console.create();
  49.   for (var i=0; i<console.beforeLoadLogs.length; i++) {
  50.    console.log(console.beforeLoadLogs[i].str, console.beforeLoadLogs[i].realHTML);
  51.   }
  52.   console.beforeLoadLogs=[];
  53.  },
  54.  eval:function() {
  55.   console.log('<span style="color:#F00">&gt;&gt;</span>&nbsp;'+console.runField.value,true);
  56.   console.log(eval(console.runField.value));
  57.   console.runField.value='';
  58.   return false;
  59.  },
  60.  log: function(str, realHTML) {
  61.   if (!document.body) {
  62.    console.beforeLoadLogs.push({str:str, realHTML:realHTML});
  63.    console.addEvent(window, 'load',console.createAfterLoading);
  64.    return;
  65.   }
  66.   if (!console.console) console.create();
  67.   if (typeof(str)=='undefined') return str;
  68.   str+="";
  69.   if (typeof(str)=='string' && !realHTML) {
  70.    str = str.replace(/</g,'&lt;');
  71.    str = str.replace(/>/g,'&gt;');
  72.    str = str.replace(/\r/g,'<br>');
  73.    str = str.replace(/\t/g,'&nbsp;');
  74.    str = str.replace(/\s/g,'&nbsp;');
  75.   }
  76.   if (console.console.innerHTML != '') console.console.innerHTML += '<hr>';
  77.   console.console.innerHTML += str+'<br>';
  78.   console.console.scrollTop = console.console.scrollHeight+10;
  79.   return false;
  80.  },
  81.  error:function(errorType, file, line) {
  82.   console.log('<strong style="color:red">/!\\&nbsp;Error:&nbsp;</strong>'+errorType+', file: <strong>'+file+'</strong>, (line '+line+')',true);
  83.   return true;
  84.  },
  85.     time: function(title) {
  86.       window.console.timers[title] = new Date().getTime();
  87.     },
  88.     timeEnd: function(title) {
  89.       var time = new Date().getTime() - window.console.timers[title];
  90.       console.log(['<strong>', title, '</strong>: ', time, 'ms'].join(''),true);
  91.     },
  92.  addEvent:function( obj, type, fn ) {
  93.   if (obj.addEventListener)
  94.    obj.addEventListener( type, fn, false );
  95.   else if (obj.attachEvent) {
  96.    obj["e"+type+fn] = fn;
  97.    obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
  98.    obj.attachEvent( "on"+type, obj[type+fn] );
  99.   }
  100.  }
  101. }
  102. window.onerror = console.error;
  103. }
 

A noter que :
-sous IE la console se lance dès qu'il y a une erreur de générée, sous Opera c'est la console de Opera qui catche l'erreur
-la console n'apparait que si on fait un console.log();
-le console.log ne permet pas comme firebug de faire : console.log(var1, var2, var3), il faut dans ce cas faire console.log(var1+","+var2+","+var3);
-le console.log transforme le HTML pour l'afficher dans la console, mais si vous voulez laisser le HTML comme du vrai HTML il faut faire : console.log("ma <strong>chaine</strong> HTML",true)

 

URL de test : http://gatsu.ftp.free.fr/html/consolelog.html
A tester sous :
-IE : tout fonctionne, le catch des erreurs aussi
-Opera : tout fonctionne saus le catch des erreurs
-Safari : pas testé, safari permet le console.log lorsqu'on lui active sa console JS donc j'en sais rien si ca marche
-Firefox : si firebug vous ne verrez pas de console, si pas fierbug vous verrez la console. Pour le catch des erreurs, j'en sais rien j'ai pas testé et j'ai la fleme de tester, et puis c'est inutile, autant installer firebug.

 

j'attends vos avis et vos demande pour améliorer la bête.
Merci de ne pas me demander de coloration syntaxique :o


Message édité par gatsu35 le 25-11-2006 à 10:20:56
mood
Publicité
Posté le 25-11-2006 à 10:05:33  profilanswer
 

n°1481607
gooopil
pfiew
Posté le 25-11-2006 à 11:06:09  profilanswer
 

L'idée est très interressante :)  Je vais tester ça un peu plus avant...

n°1481615
gatsu35
Blablaté par Harko
Posté le 25-11-2006 à 11:34:19  profilanswer
 

gooopil a écrit :

L'idée est très interressante :)  Je vais tester ça un peu plus avant...


C'est surtout que c'est mieux de faire des console.log que des alert()

n°1481660
FlorentG
Unité de Masse
Posté le 25-11-2006 à 13:54:11  profilanswer
 

Gatsu est nommé expert officiel en javascript

n°1481718
0x90
Posté le 25-11-2006 à 16:51:28  profilanswer
 

Petit patch vite-fait pour ajouter les multi-arguments à console.log [:cupra] :
http://www.deuxfleurs.org/weberies/consolelog.html

n°1481924
gatsu35
Blablaté par Harko
Posté le 26-11-2006 à 15:53:41  profilanswer
 

FlorentG a écrit :

Gatsu est nommé expert officiel en javascript


J'aurai du mal à être expert, chui quand même loin d'être une bete en JS :o
 

0x90 a écrit :

Petit patch vite-fait pour ajouter les multi-arguments à console.log [:cupra] :
http://www.deuxfleurs.org/weberies/consolelog.html


Merci chérie pour l'idéée de séparer en 2 fonctions distinctes. je vais le faire ce soir :o

n°1481925
0x90
Posté le 26-11-2006 à 16:05:43  profilanswer
 

si tu fait console.log("<br>" ); ça bug un peu quand même, il escape pas le dump de ce qu'on tape.

n°1482103
anapajari
s/travail/glanding on hfr/gs;
Posté le 27-11-2006 à 09:38:54  profilanswer
 

Je m'outre devant cette ligne:

Code :
  1. (ie ? '<input type="text">' : 'input')


C'est absolument a vomir. Et me sors pas le coup du "sinon ça marche pas sous IE" because tu sais très bien que ça marche avec un setAttribute.
 
Sinon c'est beau [:dawa]

n°1482143
gatsu35
Blablaté par Harko
Posté le 27-11-2006 à 11:00:02  profilanswer
 

oui vient changer le type d'un input en live [:moule_bite]

n°1482152
gatsu35
Blablaté par Harko
Posté le 27-11-2006 à 11:08:52  profilanswer
 

anapajari ->

Citation :


Cette commande n'est pas prise en chage. (line 30) [:dawa]


Code :
  1. subconsSubmit.setAttribute('type','submit');


 

mood
Publicité
Posté le 27-11-2006 à 11:08:52  profilanswer
 

n°1482157
gatsu35
Blablaté par Harko
Posté le 27-11-2006 à 11:14:55  profilanswer
 

Ce n'est pas la premiere fois que IE me fait le coup [:dawa]
ce con de IE empêche la modification du type d'un input que ce soit via .type ou un setAttribute les seules méthodes que j'ai trouvé sont de créer directement l'élément via ceci :  
document.createElement('<input type="submit">') c'est crade mais ca fonctionne très bien.
 
si on veut modifier le type d'un input déjà présent dans une page, j'ai aussi une méthode, c'est e changer ton outerHTML
 
J'ai déjà posté ça sur HFR

n°1482192
anapajari
s/travail/glanding on hfr/gs;
Posté le 27-11-2006 à 11:58:41  profilanswer
 

gatsu35 a écrit :

Ce n'est pas la premiere fois que IE me fait le coup [:dawa]
ce con de IE empêche la modification du type d'un input que ce soit via .type ou un setAttribute les seules méthodes que j'ai trouvé sont de créer directement l'élément via ceci :  
document.createElement('<input type="submit">') c'est crade mais ca fonctionne très bien.
 
si on veut modifier le type d'un input déjà présent dans une page, j'ai aussi une méthode, c'est e changer ton outerHTML
 
J'ai déjà posté ça sur HFR


 
Naaan [:dawa], je sais que tu as déjà posté ça et je te répondrais la même chose que la dernière fois.
Avec IE tu ne peux pas CHANGER le type d'un input, mais tu peux tout à fait l'initialiser en utilisant setAttribute. C'est lié à la façon dont IE construit les inputs dans une page.
Et puis ça change rien à ce que j'ai toujours dit je vois pas dans quel cas tu peux avoir besoin de CHANGER le type d'un input.
Pour prouver ce que je dis ( testé FF et IE6):

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  3.   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
  5. <head>
  6.   <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  7.   <title>Exemple pour Gatsu</title>
  8.   <script type="text/javascript">
  9.   window.onload = function(){
  10.     // input text qui marche sous IE et FF
  11.     var inpText = document.createElement('input');
  12.     inpText.setAttribute('type', 'text');
  13.     document.getElementById('pouet').appendChild(inpText);
  14.     // input submit qui marche sous IE et FF
  15.     var inpSubmit = document.createElement('input');
  16.     inpSubmit.setAttribute('type', 'submit');
  17.     document.getElementById('pouet').appendChild(inpSubmit);
  18.     // truc qui plante sous IE ( avec setAttribute ou direct .type)
  19.     //inpText.setAttribute('type', 'radio');
  20.   }
  21.   </script>
  22. </head>
  23. <body>
  24. <form action="" method="post" id="pouet">
  25. </form>
  26. </body>
  27. </html>


Bon sinon j'arrête là car je fais devier un topic de qualitaÿ qui n'en a vraiment pas besoin.

n°1482197
gatsu35
Blablaté par Harko
Posté le 27-11-2006 à 12:04:35  profilanswer
 

Toute remarque est bonne à prendre et ne fera que remonter la qualitaÿ du topic :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Palier au manque de Firebug sous IE et/ou Opera

 

Sujets relatifs
[PHP/MySQL] Wrappers MySQL - manque d'efficacité?[HTML] Traitement du signe Euro par Opéra (et les autres)
adapter code opera aux autres navigateursFieldset: problème de centrage de la légende sous Opéra
[JS/DOM] Bug sous IE, l'image se s'affiche pas ! [RESOLU]Problème de validation automatique de forumlaire avec Opera [RESOLU]
[resolu] Caractere d'echappement (il m'en manque un)[CSS]css non reconnu par ie mais OK avec firefox et opera [Résolu]
me manque PHP_MYSQL.DLL [Résolu][CSS] Problème de CSS avec Firefox, mais pas avec Opera ou IE.
Plus de sujets relatifs à : Palier au manque de Firebug sous IE et/ou Opera


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR