chrome console.log的别名

aug*_*ebd 22 javascript google-chrome exception

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

// creates a xss console log

var cl = ( typeof( console ) != 'undefined' ) ? console.log : alert;
cl('teste');
Run Code Online (Sandbox Code Playgroud)

输出:未捕获TypeError:非法调用

谢谢.

SLa*_*aks 31

当你写作时cl();,你正在log全球范围内调用.

Chrome console.log不希望在window对象上调用.

相反,你可以写

cl = function() { return console.log.apply(console, arguments); };
Run Code Online (Sandbox Code Playgroud)

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

  • @augustowebd:关于这个"上下文"的更多信息,我写了几篇可能有用的博客文章:*[神话方法](http://blog.niftysnippets.org/2008/03/mythical-methods .html)*和*[你必须记住`this`](http://blog.niftysnippets.org/2008/04/you-must-remember-this.html)* (5认同)
  • 这样做的缺点是不在Web Inspector中记录正确的行号. (4认同)

Ben*_*est 29

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

显然你也可以定义日志:

 log = console.log.bind(console);
Run Code Online (Sandbox Code Playgroud)

然后行号也有效