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

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

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

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

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

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

我如何使这工作在Internet Explorer?


当前回答

如果你使用的是AngularJS版本1。X你可以使用$log服务,而不是直接使用console.log。

简单的日志服务。默认实现将消息安全地写入浏览器的控制台(如果存在)。

https://docs.angularjs.org/api/ng/service/美元日志

如果你有类似的东西

angular.module('logExample', [])
  .controller('LogController', ['$scope', function($scope) {
    console.log('Hello World!');
 }]);

你可以用

angular.module('logExample', [])
  .controller('LogController', ['$scope', '$log', function($scope, $log) {
    $log.log('Hello World!');
 }]);

Angular 2+没有任何内置的日志服务。

其他回答

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

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

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

如果你使用的是AngularJS版本1。X你可以使用$log服务,而不是直接使用console.log。

简单的日志服务。默认实现将消息安全地写入浏览器的控制台(如果存在)。

https://docs.angularjs.org/api/ng/service/美元日志

如果你有类似的东西

angular.module('logExample', [])
  .controller('LogController', ['$scope', function($scope) {
    console.log('Hello World!');
 }]);

你可以用

angular.module('logExample', [])
  .controller('LogController', ['$scope', '$log', function($scope, $log) {
    $log.log('Hello World!');
 }]);

Angular 2+没有任何内置的日志服务。

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

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

例如:

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

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

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

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

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

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

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

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