为什么只有在 IE 中打开一次开发人员工具后 JavaScript 才能起作用?
IE9错误 - JavaScript仅在打开开发人员工具后才工作。
我们的网站向用户提供免费的PDF下载,并且它具有一个简单的“输入密码以下载”功能。但是,它在Internet Explorer中根本不起作用。
您可以在此 示例 。
下载通行证是“ makeuseof”。在任何其他浏览器中,都可以正常工作。在IE中,两个按钮什么都不做。
我发现的最奇怪的事情是,如果您使用F12打开并关闭开发人员工具栏,它们都会突然开始起作用。
我们尝试了兼容模式,这样,没有什么能有所作为。
我如何在Internet Explorer中完成此工作?
听起来您的 javascript 中可能有一些调试代码。
您所描述的体验是包含
console.log()
或任何其他
console
功能的代码的典型体验。
仅当打开 Dev Toolbar 时,才会激活
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;
}
}
}());
正如 @plus- 在评论中指出的那样,最新版本可在其 GitHub 页面 上找到。
除了
console.log
问题之外,还有另一个可能的原因(至少在 IE11 中):
当控制台未打开时,IE 会进行相当积极的缓存,因此请确保任何
$.ajax
调用或
XMLHttpRequest
调用都将缓存设置为 false。
例如:
$.ajax({cache: false, ...})
当开发者控制台打开时,缓存不太积极。似乎是一个错误(或者可能是一个功能?)