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

我有这个替换在document.ready()定义的console.log

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

我认为IE应该有这个function,但是,当我包括上面的调用时

  console.log("doc ready"); 

输出显示在Firefox控制台中但不在IE中 – 实际上IE脚本执行在此时完全中断。

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

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

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

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

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实时代码,即使您计划以后仅将其用于调试目的。 正如您已经看到的那样,如果没有控制台对象,它们可能导致浏览器停止执行代码,并且会有大量没有它的实时用户,因此请注意为实时用户造成问题:最好的办法是始终确保在发送代码之前已删除了对控制台的所有呼叫。

如果没有可用的控制台,这就是我用来故障转移到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; } 

控制台是用于萤火虫。

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