2012-06-14 23 views
5

में फ़ायरबग कंसोल.table लागू करें मैं कंसोल (यदि मौजूद है) में विभिन्न प्रदर्शन मीट्रिक लॉगिंग कर रहा हूं। यह सामग्री तालिका के रूप में सबसे अच्छी तरह से देखी जाती है, और फायरबग की console.table() विधि बहुत बढ़िया काम करती है - लेकिन मेरे अधिकांश उपयोगकर्ता क्रोम में हैं।क्रोम

console.table() एक अच्छा समाधान है, क्योंकि मुझे एक समर्पित यूआई नियंत्रण बनाने और बनाए रखने की आवश्यकता के बिना एक अच्छी तरह से स्वरूपित यूआई स्टाइल ग्रिड मिलता है। वर्तमान में, क्रोम में, मैं केवल अनफॉर्म किए गए टेक्स्ट को लॉग कर सकता हूं।

वैकल्पिक रूप से, यदि कंसोल में HTML सामग्री प्रस्तुत करने का कोई तरीका है, तो यह भी काम करेगा। मैं कंसोल पर एचटीएमएल भेज सकता हूं, लेकिन यह तत्व टैब में डीओएम सामग्री के रूप में प्रस्तुत करता है। मुझे पता है इंस्पेक्टर सिर्फ एचटीएमएल/जेएस/सीएसएस है - इसलिए यह तकनीकी रूप से संभव है। वास्तव में, जब मैं इंस्पेक्टर का निरीक्षण करता हूं तो मैं इसे कर सकता हूं - लेकिन यह वास्तविक दुनिया के लिए समस्या का समाधान नहीं करता है।

+0

क्या आप अपना क्रोम एक्सटेंशन बनाने के बारे में सोच रहे हैं? – Tadeck

+0

यह एक वैध विकल्प है, लेकिन ऐप के सभी उपभोक्ता ऐसा करने में सक्षम नहीं होंगे। प्राथमिक उपयोग केस है: एक ग्राहक सोचता है कि ऐप धीमा है और समर्थन कॉल करता है। समर्थन कहता है, "कृपया अपना कंसोल खोलें और मुझे परिणाम कॉपी/पेस्ट करें"। ग्राहक सब कुछ कॉपी या पेस्ट नहीं कर सकता है और समर्थन परिणाम को मान्य या मान्य नहीं कर सकता है। फिर मुझे प्रदर्शन डेटा के साथ एक ईमेल मिलता है जिसमें पूर्ण तस्वीर नहीं होती है। यदि यह ब्राउज़र में इस तरह से बेक किया गया है कि त्रुटियों की संभावना कम हो जाती है, तो यह आदर्श है। – Christopher

+0

यदि आप इसे चाहते हैं कि आप इसे किस उपयोगकर्ता चिपकाकर प्राप्त कर सकें, तो आप अपने टेबल डेटा पर 'JSON.stringify() 'का उपयोग कर सकते हैं और उपयोगकर्ता को यह प्राप्त करने के लिए कह सकते हैं, ईमेल में पेस्ट कर सकते हैं और भेज सकते हैं। इसे प्राप्त करने के बाद आपको बस deserialized डेटा मिलता है, यह एक टेबल होने की भी आवश्यकता नहीं है। क्या वह तुम्हारे लिए ठीक है? – Tadeck

उत्तर

4

में कर सकते हैं मैं एक ही समस्या थी और नीचे दिए गए कोड लिखा था। यह कंसोल.table के रूप में पूरी तरह से फीचर्ड नहीं है, यह केवल रिकॉर्ड्स की एक सरणी स्वीकार करता है, और कॉलम की सूची नहीं लेता है। आउटपुट भी उतना अच्छा नहीं है, लेकिन यह मेरे लिए पर्याप्त था। एक उदाहरण:

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

और इसके पीछे कोड:

// 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, भले ही _precisely_ (कुछ हद तक अस्पष्ट) प्रश्न का उत्तर न हो। –

0

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

यह भी आज के रूप में क्रोम 31 और Firefox 25 में काम करता है अंदर पैड ले जाया गया।

+0

यह साफ़ फ़ायरफ़ॉक्स 25.0.1 में समर्थित नहीं है (शायद आपने इसे किसी पृष्ठ पर फ़ायरबग सक्रिय करने की कोशिश की है) – Victor