IE9 Bug - JavaScript只能在打开一次开发工具后才能工作。

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

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

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

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

我们已经尝试了兼容模式等,没有什么不同。

我如何使这工作在Internet Explorer?


当前回答

我们在Windows 7和Windows 10的IE 11上遇到了这个问题。我们通过打开IE的调试功能(IE > Internet Options > Advanced tab > Browsing > Uncheck Disable script debugging (Internet Explorer))来发现问题所在。这个特性通常由域管理员在我们的环境中检查。

The problem was because we were using the console.debug(...) method within our JavaScript code. The assumption made by the developer (me) was I did not want anything written if the client Developer Tools console was not explicitly open. While Chrome and Firefox seemed to agree with this strategy, IE 11 did not like it one bit. By changing all the console.debug(...) statements to console.log(...) statements, we were able to continue to log additional information in the client console and view it when it was open, but otherwise keep it hidden from the typical user.

其他回答

除了在公认答案中提到的“控制台”使用问题之外,至少还有另一个原因,为什么有时Internet Explorer中的页面只能在激活开发人员工具时才能工作。

当开发者工具被启用时,IE不会像正常模式那样真正使用HTTP缓存(至少在ie11中是默认的)。

这意味着如果你的网站或页面有缓存问题(如果它缓存的比它应该的多,例如-这是我的情况),你在F12模式下不会看到这个问题。因此,如果javascript执行一些缓存的AJAX请求,它们可能无法在正常模式下正常工作,而在F12模式下正常工作。

我想这可能会有帮助,在任何javascript标签之前添加这个:

try{
  console
}catch(e){
   console={}; console.log = function(){};
}

我把解决方案和解决我的问题。看起来像AJAX请求,我把我的JavaScript没有处理,因为我的页面有一些缓存问题。如果你的站点或页面有缓存问题,在开发者/F12模式下你不会看到这个问题。我缓存的JavaScript AJAX请求,它可能不会像预期的那样工作,并导致执行中断,其中F12没有任何问题。 添加新参数使cache为false。

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

看起来IE特别需要这个为假,以便AJAX和javascript活动运行良好。

这解决了我的问题后,我做了一个小的改变。为了解决IE9的问题,我在我的html页面中添加了以下内容:

<script type="text/javascript">
    // IE9 fix
    if(!window.console) {
        var console = {
            log : function(){},
            warn : function(){},
            error : function(){},
            time : function(){},
            timeEnd : function(){}
        }
    }
</script>

我们在Windows 7和Windows 10的IE 11上遇到了这个问题。我们通过打开IE的调试功能(IE > Internet Options > Advanced tab > Browsing > Uncheck Disable script debugging (Internet Explorer))来发现问题所在。这个特性通常由域管理员在我们的环境中检查。

The problem was because we were using the console.debug(...) method within our JavaScript code. The assumption made by the developer (me) was I did not want anything written if the client Developer Tools console was not explicitly open. While Chrome and Firefox seemed to agree with this strategy, IE 11 did not like it one bit. By changing all the console.debug(...) statements to console.log(...) statements, we were able to continue to log additional information in the client console and view it when it was open, but otherwise keep it hidden from the typical user.