哪些浏览器支持console.log()?

28

所有浏览器都支持这个吗?我想使用console.log()输出一个错误,但不确定是否所有浏览器都支持它?

console.log("Error etc");

6
您可以在mdn上查看浏览器兼容性。 - jeremy
1
一般来说:不要指望它。这从来不是一个关键的功能,编写备用方案非常简单,所以无论如何。 - Matchu
7
如果(typeof window.console == 'undefined'){window.console = {log:function(msg){}};} - Matchu
3
我遇到了与这个评论相同的问题,https://dev59.com/hW035IYBdhLWcg3wW-pa#z6KdEYcBWogLw_1b5nYF - bradcush
1
请查看 caniuse.com 网站… - chesscov77
一些提示:您可以使用颜色来更好地查看: console.log('%c 示例文本', 'color:green;');或者使用以下方法在文本中添加一些VAR: console.log(`示例 $ {variable}`,'color:green;'); - Gilberto B. Terra Jr.
8个回答

13

不是所有的浏览器都支持console.log,因为它不是标准的一部分,而是DOM的扩展,因此您不应该依赖其存在。为了使您的代码具有韧性,您应该假设它不存在,并相应地编写代码。


10
某物是否是标准的一部分和它是否被所有浏览器(或其他相关技术)支持是完全不同的事情。更现实的理由是,确实存在旧版本的IE可能会出现问题,如果你依赖于console.log的存在-这是为了你的应用而不是为了标准遵从的神圣精神。 - John
2
@John,差不多三年后,我想说你的应用程序在生产部署中不应该使用console.log。尽管所有主要浏览器在它们当前的迭代中都支持console.log,但这并不能保证人们会使用主流浏览器或根本不使用浏览器来执行代码。我能提供的最好参考是MDN:https://developer.mozilla.org/en-US/docs/Web/API/Console/log - 此页面上的第一条声明是:“此功能是非标准的,不在标准轨道上。不要在面向Web的生产站点上使用它。”无论是WebApp还是其他应用程序,这都是正确的做法。 - Ryan Rentfro
2017年11月的更新...我注意到早期评论中链接的MDN文档不再将console.log()称为“非标准”。相反,它引用了以下WHATWG Living Standard: https://console.spec.whatwg.org/ - Jonathan Nicol

12

我过去做过类似的事情:

// Log to native console if possible, alert otherwise
window.console = typeof window.console === 'undefined'
    ? {log:function(/* polymorphic */){alert(arguments)}}
    : window.console;
你可以将它放在你的JS文件的顶部,在使用不支持console的浏览器进行调试时,它能够很好地工作,而且不需要改变已经在各个地方调用console.log的其他JS源代码。当然,你可能想要做一些比alert更有意义的事情来保持清醒... http://jsfiddle.net/4dty5/

另外,你可能想使用alert(arguments)代替alert(str) - Brian McCutchon

9

现在是2015年8月,我认为这个问题的当前答案是:

所有主要的桌面和移动浏览器都支持console.log。 (caniuse)

它不是任何标准的一部分,但现在是完整的现代浏览器可交付内容的一个预期。

然而:

如果你需要支持旧版本的浏览器(IE<10),更多的移动浏览器或使用实验性浏览器的用户,则使用polyfill (1,2,3,4)可以确保window.console存在。

它可能不会在所有浏览器的WebWorkers中起作用。 (MDN)

在UC浏览器和Opera Mini中,这些函数将运行,但你看不到输出。(caniuse)

但对于绝大多数web用户来说,我们可以假定console.log将按预期工作。


8

这段代码将检查函数是否存在,如果不存在,则创建一个虚拟函数。来源:StackOverflow

if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };

8
制作一个包装函数:
function log(text) {
  if (window.console) {
     window.console.log(text);
  }
}

10
除此之外,现在它只提供您日志包装器的行号。 - Jack Allan

7

大多数浏览器都可以,然而 Internet Explorer 9 在这方面有问题,除非你打开调试窗口,否则它不会运行任何JavaScript。我们花了几个小时才找到解决这个问题的方法。


1
在IE9中,你需要动动手脚,可以这么说,才能使控制台正常工作。将以下代码添加到你的JS文件中:`if (typeof console.log === "object" && Function.prototype.bind && console) { ["log","info","warn","error","assert","dir","clear","profile","profileEnd"] .forEach(function (method) { console[method] = this.call(console[method], console); }, Function.prototype.bind); }` 有关此问题的更多信息,请参阅[此博客文章](http://patik.com/blog/complete-cross-browser-console-log/)。 - craigpatik
请注意,如果您包含Modernizr,则上面的代码片段将在IE8中抛出错误,因为Modernizr包括一个有缺陷的Function.prototype.bind填充程序。 - craigpatik

1

console.log()无法使用时,以下是一个解决方法。您需要自己检索console.logs

  if (!window.console) window.console = {};
  if (!window.console.log) 
  {
    window.console.logs = [];
    window.console.log = function (string)
    {
      window.console.logs.push(string);
    };
  }

请始终在您的答案中提供描述。我已经为您添加了一个。 - Artjom B.

0

虽然不是所有浏览器都支持,但只需一小段代码即可完成。

在他的书《JavaScript 忍者秘籍》中,jQuery 的创始人 John Resig 有一个非常简单的代码可以处理跨浏览器的 console.log 问题。他解释说,他希望有一个适用于所有浏览器的日志消息,并且以下是他编写的代码:

 function log() {
  try {
     console.log.apply(console, arguments);
  } catch(e) {
  try {
     opera.postError.apply(opera, arguments);
  }
  catch(e) {
     alert(Array.prototype.join.call( arguments, " "));
  }
}

2
有趣。所以alert()是IE的解决方案? - ow3n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接