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

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

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

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

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

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

我如何使这工作在Internet Explorer?


当前回答

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

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

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

其他回答

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

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

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

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

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

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

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

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

当控制台没有打开时,IE会进行非常激进的缓存,所以要确保任何$。ajax调用或XMLHttpRequest调用缓存设置为false。

例如:

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

当开发人员控制台打开时,缓存就不那么激进了。似乎是一个bug(或者可能是一个功能?)

对于runeks和todotresde提供的解决方案,我还有另一种选择,它也避免了Spudley回答的评论中讨论的陷阱:

        try {
            console.log(message);
        } catch (e) {
        }

它有点邋遢,但另一方面,它简洁明了,涵盖了runeks回答中涵盖的所有日志记录方法,它有一个巨大的优势,你可以在任何时候打开IE的控制台窗口,日志就会源源不断地涌进来。