所有浏览器都支持这个吗?我想使用console.log()
输出一个错误,但不确定是否所有浏览器都支持它?
console.log("Error etc");
所有浏览器都支持这个吗?我想使用console.log()
输出一个错误,但不确定是否所有浏览器都支持它?
console.log("Error etc");
不是所有的浏览器都支持console.log
,因为它不是标准的一部分,而是DOM的扩展,因此您不应该依赖其存在。为了使您的代码具有韧性,您应该假设它不存在,并相应地编写代码。
我过去做过类似的事情:
// 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现在是2015年8月,我认为这个问题的当前答案是:
所有主要的桌面和移动浏览器都支持console.log。 (caniuse)
它不是任何标准的一部分,但现在是完整的现代浏览器可交付内容的一个预期。
然而:
如果你需要支持旧版本的浏览器(IE<10),更多的移动浏览器或使用实验性浏览器的用户,则使用polyfill (1,2,3,4)可以确保
window.console
存在。它可能不会在所有浏览器的WebWorkers中起作用。 (MDN)
在UC浏览器和Opera Mini中,这些函数将运行,但你看不到输出。(caniuse)
但对于绝大多数web用户来说,我们可以假定console.log
将按预期工作。
这段代码将检查函数是否存在,如果不存在,则创建一个虚拟函数。来源:StackOverflow
if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };
function log(text) {
if (window.console) {
window.console.log(text);
}
}
大多数浏览器都可以,然而 Internet Explorer 9 在这方面有问题,除非你打开调试窗口,否则它不会运行任何JavaScript。我们花了几个小时才找到解决这个问题的方法。
`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/)。
- craigpatikFunction.prototype.bind
填充程序。 - craigpatik当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);
};
}
虽然不是所有浏览器都支持,但只需一小段代码即可完成。
在他的书《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, " "));
}
}