别名为chrome console.log
我想知道为什么下面的代码在Google Chrome中不起作用:
// creates a xss console log var cl = ( typeof( console ) != 'undefined' ) ? console.log : alert; cl('teste');
输出:未捕获TypeError:非法调用
谢谢。
当你写cl();
,你正在呼叫log
全球上下文。
Chrome的console.log
不希望在window
对象上调用。
相反,你可以写
cl = function() { return console.log.apply(console, arguments); };
这将调用log
到console
的上下文中。
https://groups.google.com/a/chromium.org/d/msg/chromium-bugs/gGVPJ1T-qA0/F8uSupbO2R8J
显然你也可以定义日志:
log = console.log.bind(console);
然后行号也工作
不幸的是@SLaks答案不适用于IE,因为它在console.log-method中使用窗口对象作为上下文。
我会build议另一种不依赖于浏览器的方式:
!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. };