gatsu35 Blablaté par Harko | 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 :
- 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 :
- if (!window.console) {
- var console= {
- timers: {},
- beforeLoadLogs:[],
- console:null,
- runField:null,
- create:function() {
- if (console.console) return;
- var ie = document.all && window.print && !window.opera;
- var subcons = document.body.insertBefore(document.createElement('form'),document.body.firstChild);
- subcons.onsubmit = function() {console.eval(); return false;}
- subcons.action = "javascript:void(0);";
- with(subcons.style) {
- margin="0"; padding="0";
- }
- var subconsInp = subcons.appendChild(document.createElement(ie ? '<input type="text">' : 'input'));
- if (!ie) subconsInp.type='text';
- with(subconsInp.style) {
- width = "95%";
- padding = '2px 4px';
- border = '1px solid #000';
- background = '#fff';
- }
- var subconsSubmit = subcons.appendChild(document.createElement(ie ? '<input type="submit">' : 'input'));
- if (!ie) subconsSubmit.type='submit';
- with (subconsSubmit.style) {
- position = 'absolute';
- visibility = 'hidden';
- top = '0';
- left = '0';
- }
- var cons = document.body.insertBefore(document.createElement('div'),document.body.firstChild);
- with (cons.style) {
- height = '150px';
- background = '#fff';
- overflow = 'auto';
- border = '1px solid #000';
- textAlign = 'left';
- padding = '5px';
- fontFamily = 'Verdana';
- fontSize = '11px';
- color = '#000';
- }
- console.console = cons;
- console.runField = subconsInp;
- },
- createAfterLoading:function() {
- console.create();
- for (var i=0; i<console.beforeLoadLogs.length; i++) {
- console.log(console.beforeLoadLogs[i].str, console.beforeLoadLogs[i].realHTML);
- }
- console.beforeLoadLogs=[];
- },
- eval:function() {
- console.log('<span style="color:#F00">>></span> '+console.runField.value,true);
- console.log(eval(console.runField.value));
- console.runField.value='';
- return false;
- },
- log: function(str, realHTML) {
- if (!document.body) {
- console.beforeLoadLogs.push({str:str, realHTML:realHTML});
- console.addEvent(window, 'load',console.createAfterLoading);
- return;
- }
- if (!console.console) console.create();
- if (typeof(str)=='undefined') return str;
- str+="";
- if (typeof(str)=='string' && !realHTML) {
- str = str.replace(/</g,'<');
- str = str.replace(/>/g,'>');
- str = str.replace(/\r/g,'<br>');
- str = str.replace(/\t/g,' ');
- str = str.replace(/\s/g,' ');
- }
- if (console.console.innerHTML != '') console.console.innerHTML += '<hr>';
- console.console.innerHTML += str+'<br>';
- console.console.scrollTop = console.console.scrollHeight+10;
- return false;
- },
- error:function(errorType, file, line) {
- console.log('<strong style="color:red">/!\\ Error: </strong>'+errorType+', file: <strong>'+file+'</strong>, (line '+line+')',true);
- return true;
- },
- time: function(title) {
- window.console.timers[title] = new Date().getTime();
- },
- timeEnd: function(title) {
- var time = new Date().getTime() - window.console.timers[title];
- console.log(['<strong>', title, '</strong>: ', time, 'ms'].join(''),true);
- },
- addEvent:function( obj, type, fn ) {
- if (obj.addEventListener)
- obj.addEventListener( type, fn, false );
- else if (obj.attachEvent) {
- obj["e"+type+fn] = fn;
- obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
- obj.attachEvent( "on"+type, obj[type+fn] );
- }
- }
- }
- window.onerror = console.error;
- }
| 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 Message édité par gatsu35 le 25-11-2006 à 10:20:56
|