开发者问题收集

为什么只有在 IE 中打开一次开发人员工具后 JavaScript 才能起作用?

2011-10-12
173254

IE9错误 - JavaScript仅在打开开发人员工具后才工作。

我们的网站向用户提供免费的PDF下载,并且它具有一个简单的“输入密码以下载”功能。但是,它在Internet Explorer中根本不起作用。

您可以在此 示例

下载通行证是“ makeuseof”。在任何其他浏览器中,都可以正常工作。在IE中,两个按钮什么都不做。

我发现的最奇怪的事情是,如果您使用F12打开并关闭开发人员工具栏,它们都会突然开始起作用。

我们尝试了兼容模式,这样,没有什么能有所作为。

我如何在Internet Explorer中完成此工作?

3个回答

听起来您的 javascript 中可能有一些调试代码。

您所描述的体验是包含 console.log() 或任何其他 console 功能的代码的典型体验。

仅当打开 Dev Toolbar 时,才会激活 console 对象。在此之前,调用控制台对象将导致其被报告为 undefined 。打开工具栏后,控制台将存在(即使工具栏随后关闭),因此您的控制台调用将正常工作。

对此有几种解决方案:

最明显的方法是检查您的代码,删除对 console 的引用。无论如何,你不应该在生产代码中留下这样的东西。

如果你想保留控制台引用,你可以将它们包装在 if() 语句中,或者在尝试调用它之前检查控制台对象是否存在的其他条件中。

Spudley
2011-10-12

HTML5 Boilerplate 有一个不错的预制代码,用于修复控制台问题:

// Avoid `console` errors in browsers that lack a console.
(function() {
    var method;
    var noop = function () {};
    var methods = [
        'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
        'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
        'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
        'timeStamp', 'trace', 'warn'
    ];
    var length = methods.length;
    var console = (window.console = window.console || {});

    while (length--) {
        method = methods[length];

        // Only stub undefined methods.
        if (!console[method]) {
            console[method] = noop;
        }
    }
}());

正如 @plus- 在评论中指出的那样,最新版本可在其 GitHub 页面 上找到。

Tallmaris
2012-09-07

除了 console.log 问题之外,还有另一个可能的原因(至少在 IE11 中):

当控制台未打开时,IE 会进行相当积极的缓存,因此请确保任何 $.ajax 调用或 XMLHttpRequest 调用都将缓存设置为 false。

例如:

$.ajax({cache: false, ...})

当开发者控制台打开时,缓存不太积极。似乎是一个错误(或者可能是一个功能?)

user3916095
2014-08-06