有些浏览器因仅支持 window.console 的子集甚至根本不支持而臭名昭著。某些浏览器仅支持 console.info,而其他浏览器则支持信息、调试、日志、警告、错误以及可能的其他浏览器。
在 jquery.infinitescroll.js 文件的第 171 行或附近,您将找到以下代码:
// Console log wrapper
_debug: function infscr_debug() {
if (this.options && this.options.debug) {
return window.console && console.log.call(console, arguments);
}
},
在 Internet Explorer 中,除非启用了开发工具和/或脚本调试器功能,否则有时不会定义控制台方法;因此,在开发人员计算机上运行良好的 Web 应用程序在禁用开发人员工具和/或脚本调试器的生产计算机上使用时可能会严重失败。
作为开发人员,您的第一直觉可能是从代码中删除控制台语句,或者从您正在使用的任何使用 console.log 的库的代码中删除控制台语句。更糟糕的是,您可能会想完全避免控制台语句并使用警报。
由于 console.log 语句对于故障排除和调试过程非常有价值,因此可以用来确保控制台语句不会干扰生产代码的一种技术是在所有网页上包含控制台对象的默认定义,其中出现这个问题:
该 JavaScript,当包含在<head>
页面的部分,如果检测到它们尚未定义,则将 window.console 及其方法定义为空函数。
<script type="text/javascript">
// override loggers to avoid throwing errors
if(window.console == null || window.console == undefined || !window.console) {
console = { log: function() {}, info: function() {}, warn: function() {}, error: function() {}, trace: function() {}, debug: function() {} };
//var fbscript = document.createElement("script");
//fbscript.src = "https://getfirebug.com/firebug-lite-beta.js";
//fbscript.setAttribute("type","text/javascript");
//document.getElementsByTagName("head")[0].appendChild(fbscript);
} else if(!console.debug) {
console.debug = function(text) { if(console.log) console.log("D: "+text); };
}
</script>
此外,还有 4 行带注释的 JavaScript,当取消注释时,如果 window.console 为 null 或未定义,则将在您使用的任何浏览器中加载 Firebug Lite。
或者,您可以检查以确保没有在 jQuery 无限滚动插件本身的选项部分中打开调试:
debug : true,
// enable debug messaging ( to console.log )
理想情况下,这可能是一个更好的解决方案,但我更喜欢前者,因为我知道它可以帮助我避免在没有调试器的浏览器中进行测试的陷阱。
See the jQuery 无限滚动文档 http://www.infinite-scroll.com/infinite-scroll-jquery-plugin/,特别是选项部分,了解更多详细信息。