Псевдоним chrome console.log Я хотел бы знать, почему следующий код не работает в Google Chrome: // creates a xss console log var cl = ( typeof( console ) != 'undefined' ) ? console.log : alert; cl('teste'); вывод: Uncaught TypeError: незаконный вызов спасибо. Ответ 1 Когда вы пишете cl();, вы вызываете log в глобальном контексте. Chrome console.log не хочет вызываться в объекте window. Вместо этого вы можете написать cl = function() { return console.log.apply(console, arguments); }; Это вызовет log в контексте console. Ответ 2 https://groups.google.com/a/chromium.org/d/msg/chromium-bugs/gGVPJ1T-qA0/F8uSupbO2R8J Очевидно, вы также можете определить журнал: log = console.log.bind(console); а затем номера строк также работают Ответ 3 К сожалению, ответ @SLaks не применяется к IE, потому что он использует оконный объект как контекст в console.log-методе. Я бы предложил другой способ, который не зависит от браузера: !window.console && (console = {}); console.debug = console.debug || $.noop; console.info = console.info || $.noop; console.warn = console.warn || $.noop; console.log = console.log || $.noop; var src = console, desc = {}; desc.prototype = src; console = desc; desc.log = function(message, exception) { var msg = message + (exception ? ' (exception: ' + exception + ')' : ''), callstack = exception && exception.stack; src.log(msg); callstack && (src.log(callstack)); //logErrorUrl && $.post(logErrorUrl, { message: msg + (callstack || '') }); // Send clientside error message to serverside. };
Ответ 1 Когда вы пишете cl();, вы вызываете log в глобальном контексте. Chrome console.log не хочет вызываться в объекте window. Вместо этого вы можете написать cl = function() { return console.log.apply(console, arguments); }; Это вызовет log в контексте console.
Ответ 2 https://groups.google.com/a/chromium.org/d/msg/chromium-bugs/gGVPJ1T-qA0/F8uSupbO2R8J Очевидно, вы также можете определить журнал: log = console.log.bind(console); а затем номера строк также работают
Ответ 3 К сожалению, ответ @SLaks не применяется к IE, потому что он использует оконный объект как контекст в console.log-методе. Я бы предложил другой способ, который не зависит от браузера: !window.console && (console = {}); console.debug = console.debug || $.noop; console.info = console.info || $.noop; console.warn = console.warn || $.noop; console.log = console.log || $.noop; var src = console, desc = {}; desc.prototype = src; console = desc; desc.log = function(message, exception) { var msg = message + (exception ? ' (exception: ' + exception + ')' : ''), callstack = exception && exception.stack; src.log(msg); callstack && (src.log(callstack)); //logErrorUrl && $.post(logErrorUrl, { message: msg + (callstack || '') }); // Send clientside error message to serverside. };