рдХрдВрд╕реЛрд▓ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдирд╛

рд▓рдЧрднрдЧ рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдХрдВрд╕реЛрд▓ рдХреНрд░реЛрдо, рдУрдкреЗрд░рд╛, IE рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдлреЙрдХреНрд╕ рдореЗрдВ рдлрд╛рдпрд░рдмрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЕрд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣реИ:

рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдареАрдХ рдХрд░реЗрдВ!



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХрдВрд╕реЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдорд╛рд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореВрд▓ рдХрдВрд╕реЛрд▓ рдХреЛ рдЪрд░ original рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛
 (function () { var global = this; var original = global.console; //   var console = global.console = {}; })(); 


рдЕрдм рдЖрдкрдХреЛ рдореВрд▓ рдХрдВрд╕реЛрд▓ рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ:

 (function () { var global = this; var original = global.console; var console = global.console = {}; //   var methods = ['assert', 'count', 'debug', 'dir', 'dirxml', 'error', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 'trace', 'warn']; //        for (var i = methods.length; i--;) { //  ,     , //          'assert' (function (methodName) { //    console[methodName] = function () { //         if (original && methodName in original) { //     original[methodName].apply(original, arguments); } }; })(methods[i]); } })(); 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрдВрд╕реЛрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдорд┐рд▓рд╛, рдмрд▓реНрдХрд┐ рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рднреА рд╣рд▓ рд╣реБрдИ - рдХрдВрд╕реЛрд▓ рдХреЛ рд╕рдВрджрд░реНрдн рд╕реЗ рджреВрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 //    console.log $('#my-element').click(console.log); //   var log = console.log; for (var i = 0; i < 10; i++) log(i); 


рд╣рдорд╛рд░реЗ рдкреБрдирд░реНрд╡рд┐рддреНрдд рдХреЗ рдмрд┐рдирд╛, рдХрд┐ рдкрд╣рд▓реЗ рдореЗрдВ, рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ " Illegal invocation " рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред

рдЕрдЧрд▓реА рдЪреАрдЬрд╝ рдЬреЛ рд╣рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд╡рд╣ рд╣реИ рдЙрддреНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдбрд┐рдмрдЧ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ред рдпрд╣ рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 (function () { // .. var console = global.console = {}; console.production = false; // ... console[methodName] = function () { //               if (original && methodName in original && !console.production) { //     original[methodName].apply(original, arguments); // .. })(); 


рдЕрдм рдбрд┐рдмрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдЖрд░рдВрдн рдХреЗ рджреМрд░рд╛рди рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛:

 console.production = true; 


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реБрд╡рд┐рдзрд╛рдПрдБ


Govnoosol


IE 8 рдФрд░ IE 9 рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╣рддреЗ рд╣реИрдВ:
 alert(typeof console.log); 

рд╡рд╣ рд╕рд╛рдорд╛рдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ "рдлрд╝рдВрдХреНрд╢рди", рдФрд░ рдЧрдзрд╛ - "рдСрдмреНрдЬреЗрдХреНрдЯ" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред object рдореЗрдВ рдПрдХ apply рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдмрдЧ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬрд╛рджреВ:
 original[methodName].apply(original, arguments); //  : Function.prototype.apply.call(original[methodName], original, arguments); 


Firebug


рдлрд╛рдпрд░рдмрдЧ рдПрдХ рдорд╛рдирдХ рдЪрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдлрд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛:

  var original = global.console; var console = global.console = {}; // => var original = global.console; delete global.console; var console = global.console = {}; 


рдирдП рддрд░реАрдХреЗ рдЬреЛрдбрд╝реЗрдВ


рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдмрд╕реЗ рдЙрдиреНрдирдд рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХреЛрдИ рд╕рдордп рдФрд░ рд╕рдордп рдкрджреНрдзрддрд┐ рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдлрд╛рдпрд░рдмрдЧ рд╕реЗ рдкреЛрд░реНрдЯ рдХрд░реЗрдВ:

  // ... var original = global.console; var console = global.console = {}; if (original && !original.time) { original.time = function(name, reset){ if (!name) return; var time = new Date().getTime(); if (!console.timeCounters) console.timeCounters = {}; var key = "KEY" + name.toString(); if(!reset && console.timeCounters[key]) return; console.timeCounters[key] = time; }; original.timeEnd = function(name){ var time = new Date().getTime(); if(!console.timeCounters) return; var key = "KEY" + name.toString(); var timeCounter = console.timeCounters[key]; if (timeCounter) { var diff = time - timeCounter; var label = name + ": " + diff + "ms"; console.info(label); delete console.timeCounters[key]; } return diff; }; } //   var methods = // ... 


рдЕрдм рддреЛ рдЧрдзреЗ рднреА рд╕рдордп рдЧрд┐рдирдирд╛ рд╕реАрдЦ рдЧрдП рд╣реИрдВред

рд╣рдореЗрдВ рдорд┐рд▓рд╛ рдЕрдВрддрд┐рдо рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 (function () { var global = this; var original = global.console; if ('console' in global) delete global.console; var console = global.console = {}; console.production = false; if (original && !original.time) { original.time = function(name, reset){ if (!name) return; var time = new Date().getTime(); if (!console.timeCounters) console.timeCounters = {}; var key = "KEY" + name.toString(); if(!reset && console.timeCounters[key]) return; console.timeCounters[key] = time; }; original.timeEnd = function(name){ var time = new Date().getTime(); if(!console.timeCounters) return; var key = "KEY" + name.toString(); var timeCounter = console.timeCounters[key]; if (timeCounter) { var diff = time - timeCounter; var label = name + ": " + diff + "ms"; console.info(label); delete console.timeCounters[key]; } return diff; }; } var methods = ['assert', 'count', 'debug', 'dir', 'dirxml', 'error', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 'trace', 'warn']; for (var i = methods.length; i--;) { (function (methodName) { console[methodName] = function () { if (original && methodName in original && !console.production) { Function.prototype.apply.call(original[methodName], original, arguments); } }; })(methods[i]); } })(); 


рдЕрдм рдХрдВрд╕реЛрд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпреБрджреНрдз рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдХреНрд╖рдо рдФрд░ IE рдореЗрдВ рд╕рдордп рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ)

рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдХреЛрдб рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрд╕реЗрдВрд╕ LGPL / MIT рд╣реИ, рдкрд╛рда рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрд╕реЗрдВрд╕ CC BY 3.0 рд╣реИ

рдЧрд┐рддреБрдм: github.com/theshock/console-cap

Source: https://habr.com/ru/post/In116852/


All Articles