为什么只有在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?