Подтвердить что ты не робот

Псевдоним chrome console.log

Я хотел бы знать, почему следующий код не работает в Google Chrome:

// creates a xss console log

var cl = ( typeof( console ) != 'undefined' ) ? console.log : alert;
cl('teste');

вывод: Uncaught TypeError: незаконный вызов

спасибо.

4b9b3361

Ответ 1

Когда вы пишете cl();, вы вызываете log в глобальном контексте.

Chrome console.log не хочет вызываться в объекте window.

Вместо этого вы можете написать

cl = function() { return console.log.apply(console, arguments); };

Это вызовет log в контексте 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.
};