chrome console.log 的别名

IT技术 javascript exception google-chrome
2021-01-24 01:23:15

我想知道为什么以下代码在 Google Chrome 中不起作用:

// creates a xss console log

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

输出:未捕获的类型错误:非法调用

谢谢。

3个回答

https://groups.google.com/a/chromium.org/d/msg/chromium-bugs/gGVPJ1T-qA0/F8uSupbO2R8J

显然你也可以定义日志:

 log = console.log.bind(console);

然后行号也有效

我爱你,这让我疯狂多年
2021-04-04 01:23:15
终于有解决方案了!感谢:D
2021-04-07 01:23:15

当您编写 时cl();,您是log在全局上下文中调用

Chromeconsole.log不想在window对象调用。

相反,你可以写

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

这将log在 的上下文中调用console

@augustowebd:关于这个“上下文”的更多信息,我写了几篇可能有用的博客文章:神话方法你必须记住this
2021-03-23 01:23:15
这样做的缺点是无法在 Web Inspector 中记录正确的行号。
2021-03-24 01:23:15

不幸的是,@SLaks 答案不适用于 IE,因为它在 console.log-method 中使用 window-object 作为上下文。

我会建议另一种不依赖于浏览器的方式:

!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.
};