Har*_*ett 17 javascript console jquery logging internet-explorer
我有这个替代console.log定义document.ready():
$(document).ready(function(){
console.log("doc ready");
if(typeof console === "undefined"){
console = { log: function() { } };
}
}
Run Code Online (Sandbox Code Playgroud)
我认为IE应该有这个功能,但是,当我包括上面的调用
console.log("doc ready");
Run Code Online (Sandbox Code Playgroud)
输出显示在Firefox控制台中但不在IE中 - 实际上IE脚本执行在此时完全中断.
在IE中写入控制台的正确方法是什么?
Dr.*_*lle 13
由于指令的顺序错误,脚本执行中断,这可能更好:
$(document).ready(function(){
if(typeof console === "undefined"){
console = { log: function() { } };
}
console.log("doc ready");
}
Run Code Online (Sandbox Code Playgroud)
如果您首先访问控制台,然后检查它是否存在(如果不存在则创建它),这会导致错误.
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,即使您计划稍后仅将它们用于调试目的.正如您已经看到的那样,如果没有控制台对象,它们会导致浏览器停止执行代码,并且会有大量没有它的实时用户,因此请注意为实时用户造成问题:最好的办法是始终确保在发送代码之前已删除了对控制台的所有呼叫.