5

我有一个在所有浏览器中都能正常工作的 JS 脚本。但令所有人惊讶的是,在 IE 中它在第一次尝试时不起作用。

如果在加载页面后按 F12(打开 ie 调试器)并刷新页面,它可以正常工作!就像其他浏览器一样!但对于这项工作,我必须按 F12。

当我们打开ie的调试器时,它会做些什么吗?我找不到解决方案!

提前致谢。

4

3 回答 3

12

当你没有打开调试器时,IE 认为没有 console.log 这样的东西,并给你调用未定义函数的错误。当您按 F12 时,您将获得控制台,因此 console.log 不再是未定义的。

您可以通过将其放在代码顶部来解决此问题:

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

如果控制台不存在,这只会让浏览器不做任何事情,而不是从您的代码中编辑掉 console.log,如果它们未定义,则将它们定义为“不做任何事情”功能。

如果您希望缩小 js 文件大小(对于移动使用尤其重要),您最终会希望删除发布版本上的详细日志记录。

于 2012-07-05T14:13:58.030 回答
2

console.log()你的脚本中有类似的东西吗?这可以解释,因为在您按 F12 之前没有控制台

于 2012-07-05T14:13:25.593 回答
2

上一篇文章的扩展版本

if (!('console' in window)) {
    var stub = function() { ; };
    window.console = {
        log : stub,
        info : stub,
        warn : stub,
        error : stub,
        assert : stub
    };
}

我发布了这个仅在需要时才安装存根的新版本

/**
 * On IE console is not set if not opened and debug doesn't exists
 */
(function() {
    if (!('console' in window)) { window.console = {}; }
    var kind = ['log', 'info', 'warn', 'error', 'assert', 'debug'];
    var stub = function() { ; };
    for (var i = 0; i < kind.length; i++) {
        if (kind[i] in window.console) { continue; }
        window.console[kind[i]] = stub;
    }
})();
于 2012-12-04T04:15:16.467 回答