省略或修改/扩展内置的javascript方法以实现兼容性

时间:2011-08-26 04:37:25

标签: javascript methods built-in

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

我的问题是关于第二个选项,如何编写这样的库?它只是运行onload会影响js从那时开始解析的方式吗?喜欢说if browser == IE, omit all instances of console.log()的东西......或者它是console.log()方法的扩展,使它能够自我意识到它被调用的浏览器?我对扩展jQuery函数有点熟悉,但从未见过用raw js完成的操作。我对此感兴趣,因为我觉得这通常是实现浏览器交叉兼容性的好方法,这与console.log()无关。

2 个答案:

答案 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 */;
}