我替换了console.log
中定义的document.ready()
:
$(document).ready(function(){
console.log("doc ready");
if(typeof console === "undefined"){
console = { log: function() { } };
}
}
我认为IE应该可以使用此功能,但是当我包含上面的调用时
console.log("doc ready");
输出显示在Firefox控制台中但不在IE中 - 实际上IE脚本执行在此时完全中断。
在IE中写入控制台的正确方法是什么?
答案 0 :(得分:13)
由于指令的顺序错误,脚本执行中断,这可能更好:
$(document).ready(function(){
if(typeof console === "undefined"){
console = { log: function() { } };
}
console.log("doc ready");
}
如果您首先在检查控制台是否存在之前访问控制台(如果不存在则创建它),这会导致错误。
答案 1 :(得分:6)
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
调用的实时代码,即使您计划稍后仅将其用于调试目的。正如您已经看到的那样,如果没有控制台对象,它们会导致浏览器停止执行代码,并且会有大量没有它的实时用户,因此请注意为实时用户造成问题:最好的办法是始终确保在发送代码之前已经删除了对控制台的所有呼叫。
答案 2 :(得分:2)
如果没有可用的控制台,这就是我用来故障转移到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;
}
答案 3 :(得分:0)
控制台适用于萤火虫。
您必须安装firebug lite才能在IE中启用写入控制台。