我有一个在所有浏览器中都能正常工作的 JS 脚本。但令所有人惊讶的是,在 IE 中它在第一次尝试时不起作用。
如果在加载页面后按 F12(打开 ie 调试器)并刷新页面,它可以正常工作!就像其他浏览器一样!但对于这项工作,我必须按 F12。
当我们打开ie的调试器时,它会做些什么吗?我找不到解决方案!
提前致谢。
我有一个在所有浏览器中都能正常工作的 JS 脚本。但令所有人惊讶的是,在 IE 中它在第一次尝试时不起作用。
如果在加载页面后按 F12(打开 ie 调试器)并刷新页面,它可以正常工作!就像其他浏览器一样!但对于这项工作,我必须按 F12。
当我们打开ie的调试器时,它会做些什么吗?我找不到解决方案!
提前致谢。
当你没有打开调试器时,IE 认为没有 console.log 这样的东西,并给你调用未定义函数的错误。当您按 F12 时,您将获得控制台,因此 console.log 不再是未定义的。
您可以通过将其放在代码顶部来解决此问题:
if (!window.console) window.console = {};
if (!window.console.log) window.console.log = function () { };
如果控制台不存在,这只会让浏览器不做任何事情,而不是从您的代码中编辑掉 console.log,如果它们未定义,则将它们定义为“不做任何事情”功能。
如果您希望缩小 js 文件大小(对于移动使用尤其重要),您最终会希望删除发布版本上的详细日志记录。
console.log()
你的脚本中有类似的东西吗?这可以解释,因为在您按 F12 之前没有控制台
上一篇文章的扩展版本
if (!('console' in window)) {
var stub = function() { ; };
window.console = {
log : stub,
info : stub,
warn : stub,
error : stub,
assert : stub
};
}
我发布了这个仅在需要时才安装存根的新版本
/**
* On IE console is not set if not opened and debug doesn't exists
*/
(function() {
if (!('console' in window)) { window.console = {}; }
var kind = ['log', 'info', 'warn', 'error', 'assert', 'debug'];
var stub = function() { ; };
for (var i = 0; i < kind.length; i++) {
if (kind[i] in window.console) { continue; }
window.console[kind[i]] = stub;
}
})();