在 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)的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Firefox、Greasemonkey 脚本中使用时,console.log 不起作用