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

IE9错误 - JavaScript只能在打开开发者工具后才能使用。

我们的网站为用户提供免费的pdf下载,并有一个简单的“输入密码下载”功能。 但是,它在Internet Explorer中完全不起作用。

你可以在这个例子中看到自己。

下载通行证是“makeuseof”。 在任何其他浏览器中,它工作正常。 在IE中,两个按钮都不起作用。

我发现的最奇怪的事情是,如果你用F12打开和关闭开发者工具栏,它会突然开始工作。

我们尝试过兼容模式等等,没有什么区别。

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


这听起来像你可能在你的JavaScript中有一些调试代码。

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

console对象仅在打开“开发工具栏”时激活。 在此之前,调用控制台对象会导致它被报告为undefined 。 工具栏打开后,控制台将会存在(即使工具栏随后关闭),所以控制台的调用将会起作用。

有几个解决方案:

最明显的是通过代码移除对console引用。 无论如何,你不应该在生产代码中留下这样的东西。

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


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;
        }
    }
}());

正如@评论中指出的那样,最新版本可以在他们的GitHub页面上找到


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

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

例如:

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

当开发人员控制台处于打开状态时,缓存的攻击性会降低。 似乎是一个错误(或者一个功能?)

链接地址: http://www.djcxy.com/p/41967.html

上一篇: Why does JavaScript only work after opening developer tools in IE once?

下一篇: > shouldOverrideUrlLoading Webview Android