在 IE 中写入脚本控制台(console.log)的正确方法是啥?

Posted

技术标签:

【中文标题】在 IE 中写入脚本控制台(console.log)的正确方法是啥?【英文标题】:What's the correct way to write to the script console (console.log) in IE?在 IE 中写入脚本控制台(console.log)的正确方法是什么? 【发布时间】:2011-05-18 11:45:23 【问题描述】:

我在document.ready() 中定义了console.log 的替代品:

$(document).ready(function()
  console.log("doc ready");
  if(typeof console === "undefined")
    console =  log: function()   ;
  

我以为 IE 应该有这个功能,但是当我包含上面的调用时

  console.log("doc ready");

输出出现在 Firefox 控制台中,但没有出现在 IE 中 - 事实上,此时 IE 脚本执行完全中断。

在 IE 中写入控制台的正确方法是什么?

【问题讨论】:

【参考方案1】:

由于指令顺序错误,脚本执行中断,这可能会更好:

$(document).ready(function()

  if(typeof console === "undefined")
    console =  log: function()   ;
  
  console.log("doc ready");

如果您在检查控制台是否存在(如果不存在则创建它)之前先访问控制台,则会导致错误。

【讨论】:

【参考方案2】:

IE6/7 默认没有控制台。

事实上,Firefox 也没有——它是由一个名为 Firebug 的插件提供的;如果您使用没有安装 Firebug 的 Firefox 副本,那么您在尝试调用 console 时会遇到错误,就像使用 IE 一样。

IE8/9 有一个控制台。

Chrome 和 Safari 确实有一个内置的控制台对象,但不要指望它的工作方式与 Firebug 或 IE8 完全相同。

请注意,在所有浏览器中,除非打开调试窗口,否则可能不会创建控制台对象。这意味着带有console.log 调用的代码可能在任何 浏览器中失败,而不仅仅是IE。

在您的示例中,您实际上是在创建一个虚拟的 console 对象(如果它不存在),这显然是为了防止没有控制台的浏览器在您调用 console.log() 时崩溃。但是您在运行该代码之前调用了console.log(),因此那些没有控制台的浏览器将在该行崩溃。因此,您应该将 console.log("doc ready"); 行向下移动,使其位于检测 console 是否存在的位之后。

如果您希望 IE 存在控制台,有一个名为 Firebug Lite 的 Firebug 版本,可以在任何浏览器上运行。如果你运行它,它将创建 console 对象。

但是,请注意,它只能在页面加载后运行,因此您永远无法让它在文档就绪功能中显示控制台消息。此外,如果控制台对象已经存在,它可能无法创建它,因此您在文档中准备创建虚拟控制台对象的代码可能会阻止 Firebug Lite 正常工作。

最后,虽然将控制台用于调试目的非常棒,但请确保您永远不要通过调用 console.log 发送实时代码,即使您打算稍后仅将它们用于调试目的。正如你已经看到的,如果浏览器没有控制台对象,它们可能会导致浏览器停止执行代码,并且会有很多没有控制台对象的实时用户,所以要小心给实时用户带来问题:最好的办法是始终确保在发布代码之前已删除对控制台的所有调用。

【讨论】:

在某种程度上是错误的,因为 IE 在 IE8+ 中有一个控制台,没有插件/额外的 js 代码。 @epascarello - 很公平,尽管它对于原始海报来说是失败的。 (不过,他没有具体说明他使用的是什么版本的 IE)。 [编辑我的答案使其更具体] 赞成提及永远不要使用 console.log 发布实时代码。【参考方案3】:

如果没有可用的控制台,这就是我用来故障转移到 firebug lite 的方法。这保证你会得到一些描述的控制台,尽管它们的工作方式略有不同,所以要小心。

function attachConsole(force) 
  if(force || typeof console === "undefined")
    var head= document.getElementsByTagName('head')[0];
    var script= document.createElement('script');
    script.type= 'text/javascript';
    script.src= 'http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js';
    head.appendChild(script);
    return true;
  
return false;

【讨论】:

【参考方案4】:

控制台用于萤火虫。

您必须安装 firebug lite 才能在 IE 中写入控制台。

【讨论】:

错了,IE7及以下的控制台必须安装firebug lite。 IE8 有一个控制台,在所有的日志记录方法上不如 Firebug 强大,但它就在那里。

以上是关于在 IE 中写入脚本控制台(console.log)的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

ie8不支持console.log()的解决方法

避免IE中的javascript错误控制台.log

在 Firefox、Greasemonkey 脚本中使用时,console.log 不起作用

java web编程中console.info 和console.log 有啥区别

Postman调试模式

Postman----打开postman console控制台,查看接口测试打印log