2012-06-14 13 views
5

Sto registrando varie metriche di prestazioni sulla console (se presente). Questo contenuto è visualizzato al meglio come una tabella e il metodo console.table() di FireBug funziona alla grande, ma la maggior parte dei miei utenti è in Chrome.Implementare la console firebug.table in chrome

console.table() è un'ottima soluzione, perché ottengo una griglia in stile UI ben formattata senza la necessità di creare e mantenere un controllo dell'interfaccia utente dedicato. Attualmente, in Chrome, posso accedere solo al testo non formattato.

In alternativa, se esiste un modo per il rendering di rendering nella console, anche questo funzionerebbe. Posso inviare html alla console, ma esegue il rendering come contenuto DOM nella scheda degli elementi. So che l'ispettore è solo HTML/JS/CSS, quindi è tecnicamente possibile. In effetti, posso farlo quando ispeziono l'ispettore, ma questo non risolve il problema per il mondo reale.

+0

Hai pensato di creare la propria estensione di Chrome? – Tadeck

+0

È un'opzione valida, ma non tutti gli utenti dell'app potranno farlo. Il caso d'uso principale è: un cliente pensa che l'app sia lenta e chiama il supporto. Il supporto dice "per favore apri la tua console e copia/incolla i risultati". Il cliente può o non può copiare/incollare tutto e il supporto può o non può convalidare il risultato. Poi ricevo un'email con dati sulle prestazioni che non hanno l'immagine completa. Se viene infornato nel browser in modo tale da ridurre la possibilità di errori, è l'ideale. – Christopher

+0

Se lo desideri come lo si può usare ottenendo ciò che l'utente ha incollato, si può semplicemente usare 'JSON.stringify()' sui dati della tabella e dire all'utente di farlo, incollarlo nell'e-mail e inviare. Dopo averlo ricevuto si ottengono solo dati deserializzati, non è nemmeno necessario essere un tavolo. Ti sta bene? – Tadeck

risposta

4

Ho avuto lo stesso problema e ho scritto il codice qui sotto. Non è così completo come console.table, accetta solo una serie di record e non accetta un elenco di colonne. Anche l'output non è bello, ma è stato abbastanza per me. Un esempio:

$ console_table([{who:"World",message:"Hello"} 
       ,{who:"My wife",message:"Good Morning!"}]) 
|who |message  | 
|World |Hello  | 
|My wife|Good Morning!| 

E il codice dietro di esso:

// Will be available in the latest Chrome, then I can delete this 
function console_table(xs) 
{ 
    if (xs.length === 0) 
     console.log("No data"); 
    else 
    { 
     var widths = []; 
     var cells = []; 
     for (var i = 0; i <= xs.length; i++) 
      cells.push([]); 
     for (var s in xs[0]) 
     { 
      var len = s.length; 
      cells[0].push(s); 
      for (var i = 0; i < xs.length; i++) 
      { 
       var ss = "" + xs[i][s]; 
       len = Math.max(len, ss.length); 
       cells[i+1].push(ss); 
      } 
      widths.push(len); 
     } 
     var s = ""; 
     for (var x = 0; x < cells.length; x++) 
     { 
      for (var y = 0; y < widths.length; y++) 
       s += "|" + pad(widths[y], cells[x][y]); 
      s += "|\n"; 
     } 
     console.log(s); 
    } 
} 

function pad(n,s) 
{ 
    var res = s; 
    for (var i = s.length; i < n; i++) 
     res += " "; 
    return res; 
} 
+0

+1 per essere un utile trucco, anche se non è _precisamente_ una risposta alla domanda (un po 'vagamente formulata). –

0

spostati rilievo all'interno

// Will be available in the latest Chrome, then I can delete this 
function console_table(xs) 
{ 

    function pad(n,s) 
    { 
     var res = s; 
     for (var i = s.length; i < n; i++) 
      res += " "; 
     return res; 
    } 

    if (xs.length === 0) 
     console.log("No data"); 
    else 
    { 
     var widths = []; 
     var cells = []; 
     for (var i = 0; i <= xs.length; i++) 
      cells.push([]); 
     for (var s in xs[0]) 
     { 
      var len = s.length; 
      cells[0].push(s); 
      for (var i = 0; i < xs.length; i++) 
      { 
       var ss = "" + xs[i][s]; 
       len = Math.max(len, ss.length); 
       cells[i+1].push(ss); 
      } 
      widths.push(len); 
     } 
     var s = ""; 
     for (var x = 0; x < cells.length; x++) 
     { 
      for (var y = 0; y < widths.length; y++) 
       s += "|" + pad(widths[y], cells[x][y]); 
      s += "|\n"; 
     } 
     console.log(s); 
    } 
} 
1

Funziona anche in Chrome 31 e Firefox 25 a partire da oggi.

+0

NON è supportato nella versione pulita di Firefox 25.0.1 (forse lo hai provato con Firebug attivo su una pagina) – Victor

Problemi correlati