0

console.log()今天早些时候在 Stackoverflow 的某个地方读到过,我记得读到它会导致 IE 出错。用户曾说过,它的所有实例都应该在部署之前从代码中删除,或者可以使用javascript 库在 IE 中省略它。

我的问题是关于第二个选项,如何编写这样的库?是否只是运行的东西onload会影响从那时起解析 js 的方式?就像说的那样if browser == IE, omit all instances of console.log()……或者它是对方法的扩展,console.log()让它自我意识到它被调用的是什么浏览器?我对扩展 jQuery 函数有点熟悉,但从未见过使用原始 js 完成此操作。我对此很感兴趣,因为我觉得一般来说这将是实现浏览器交叉兼容性的好方法,这不是console.log()具体的。

4

2 回答 2

3

一种方法是确保console.log()始终定义它,以便您始终可以放心使用它。您可以添加此代码以确保始终定义它。

这段代码将使它在 IE(或任何其他没有它的浏览器)中console.log()被定义并且安全地什么也不做。当它已经存在时,此代码将不做任何事情,而保留先前的定义console.log()并保持不变。

if (!window.console) {
    window.console = {};
}
if (!console.log) {
    console.log = function() {};
}
于 2011-08-26T04:43:02.320 回答
1

有几种不同的方法可以测试可能存在或不存在的全局属性。你应该尽量保持防御,例如

var global = this;

if (!('console' in global)) {
  global.console = {};
}

if (!('log' in global.console)) {
  global.console.log = /* whatever */;
}

in 测试也许可以使用typeof代替。这个想法是不使用可能不存在的标识符。也许更理智的是:

// If console exists, declaring it will not hurt
// If it didn't exist, it does now
var console;

if (typeof console == 'undefined') {
  console = {};
}

if (typeof console.log == 'undefined') {
     console.log = /* whatever */;
}
于 2011-08-26T05:55:10.450 回答