我今天早些时候在Stackoverflow上的某处读到了console.log()
,我记得读过它会导致IE出错。用户说在部署之前应该从代码中删除它的所有实例,或者可以使用 javascript库在IE中省略它。
我的问题是关于第二个选项,如何编写这样的库?它只是运行onload
会影响js从那时开始解析的方式吗?喜欢说if browser == IE, omit all instances of console.log()
的东西......或者它是console.log()
方法的扩展,使它能够自我意识到它被调用的浏览器?我对扩展jQuery函数有点熟悉,但从未见过用raw js完成的操作。我对此感兴趣,因为我觉得这通常是实现浏览器交叉兼容性的好方法,这与console.log()
无关。
答案 0 :(得分:3)
一种方法是确保始终定义console.log()
,以便您可以随时使用它而无需担心。您可以添加此代码以确保始终定义它。
此代码将使其在IE(或任何其他没有它的浏览器)中,console.log()
将被定义并安全地不执行任何操作。当它已经存在时,此代码将不会执行任何操作,只会保留先前console.log()
的定义并且不会触及。
if (!window.console) {
window.console = {};
}
if (!console.log) {
console.log = function() {};
}
答案 1 :(得分: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 */;
}