`
yanhaijing
  • 浏览: 14838 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

给你的网站添加 console.js

阅读更多

本文仅先给使用console调试的FE同学,如果你还不知道console是什么,或者还停留在alert阶段,那就不要浪费时间了,say bay bay!

你是否试程序的过程中用过console.log(***),发现在现代浏览器里运行好好的,到了ie里却出现莫名其妙的错误,你完全不知道为什么。

或者你知道在ie下console不能使用,每次上线前都要注释掉console的代码,一不小心漏掉了一个。

如果有过上面类似的情况,和我有着同样的烦恼,那恭喜你,console.js就是为你准备的。(如果你用着非常牛逼的自动化工具,能自动过滤掉console的话,往下看下也是会有收获的)

你还在写类似下面这样的代码吗?

if (console && console.log) {
    console.log(***);
}

 

或者

console.log = console.log || function () {}

 

那么是时候做出改变了,console.js会帮你解决这些问题。

console.js是什么

console.js是一个微型js库,用来修复在不支持或部分支持console的浏览器下,调用console.***出错的问题。

这其实有点类似reset.css或者html5shim的做法,console.js参考了MSDN MDN Firebug三个文档对console的介绍。是其中提到api的超集。

console.js的全部代码如下,这么简单的代码,还是老规矩不解释:

;(function(g) {
    'use strict';
    var _console = g.console || {};
    var methods = ['assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'exception', 'error', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn'];

    var console = {version: '0.1.0'};
    var key;
    for(var i = 0, len = methods.length; i < len; i++) {
        key = methods[i];
        console[key] = function (key) {
            return function () {
                if (typeof _console[key] === 'undefined') {
                    return 0;
                }

                Function.prototype.apply.call(_console[key], _console, arguments);
            };           
        }(key);
    }
    
    g.console = console;
}(window));

 

小贴士:你知道最前面的分号是干嘛用的吗?

其实是为了防止自动化工具拼接js时,前面的js的结尾处忘记了加分号,然后拼接出来的代码就挂了。属于防御式编程。

例如a.js和b.js代码如下:

a.js

(function () {
    //...
}())

 

b.js

(function () {
    //...
}());

 

上面的代码被合后就会变为

(function () {
    //...
}())
(function () {
    //...
}());

 

这段代码执行时就会报错了,穿插一个小知识点,太小了,无法自成文章。

更多信息请参考console.js的文档

仅此而已了吗?

我一直在思考还可以做哪些改进,或者功能,仅此而已了吗?当然不是,我能想到的还可以做下面的一些改进。

增加一个对原始console的访问接口,类似jq的noConflict,或者在现在的console上加一个对原来console的引用。

增加对域名的过滤功能,比如我们可能只希望log信息在调试的时候输出,而在线上时不做输出。

目前对不支持的接口仅简单赋值为空函数,可考虑对不支持的接口做模拟,对不支持console功能的浏览器,提供自定义模拟console。

当然这些功能是否应该加入console.js,是个问题,应该思考下,console.js的初衷是什么。。。

不足

对于ie8 9浏览器,在首次打开控制台时,会新建console对象,现在console.js,尽在页面载入时做修复,无法解决这个问题。

但对于打开控制台的人,绝大多数应该不属于用户吧。($ _ $)

总结

console.js 与console就想html5shim于html5,仅此而已,如此简单。

github地址:https://github.com/yanhaijing/console.js

1
0
分享到:
评论

相关推荐

    st2 webconsole.html页面ognl调试1

    在Webconsole.js中,`keyEvent`函数是实现命令行交互的核心。当用户按下回车键时(keyCode为13),函数将获取当前输入的`wc-command`的值,即OGNL表达式,然后通过Ajax发送到服务器进行执行。`the_url`的值是通过父...

    console.html:添加console.html方法,可以漂亮的输出HTML字符串HTMLNode

    控制台.html 为方便起见,添加了 console.html 方法 安装: npm install console.html --savebower install console.html --save在节点中使用: // call once somewhere in the beginningrequire('console.html');...

    前端项目-console.js.zip

    `console.js` 文件通常包含自定义的控制台函数,以增强原生浏览器控制台的功能,提供更加友好的输出格式,或者增加额外的调试辅助工具。在“前端项目-console.js.zip”中,我们可以期待找到一个专门针对前端开发的...

    Node.js-自制利用node的inspect方法对console.log进行一层封装

    在Node.js环境中,`console.log`是我们常用的调试工具,它能简单地打印出变量的值。然而,有时候我们可能需要更详细的输出信息,比如对象的完整结构,这正是`util.inspect`方法发挥作用的地方。本教程将详细介绍如何...

    JavaScript查看代码运行效率console.time()与console.timeEnd()用法

    当你调用`console.time(label)`时,浏览器会记录当前时间点,以便稍后计算时间差。 `console.timeEnd(label)`方法则用于结束之前通过`console.time(label)`启动的计时器,并打印出从开始到结束这段时间的耗时。它...

    konsole.table:Node.js 的 console.table polyfill

    konsole.table Node.js 的 console.table API polyfill konsole.table在 Node 中添加了console.table支持,因此您的相同代码可以在 Node 和浏览器中运行。 该模块的目的是在浏览器中准确复制console.table API。 该...

    node.js中的console.trace方法使用说明

    Node.js 中 console.trace() 的实际实现源码可能如下所示,它利用了 JavaScript 的 Error 对象和 Error.captureStackTrace 方法来创建一个包含调用栈信息的错误对象,然后将其输出到 stderr: ```javascript Console...

    rocketmq-console.rar

    RocketMQ是一款由阿里巴巴开源的分布式消息中间件,它在处理高并发、大数据量的消息传递方面表现出色。RocketMQ Console是其官方...通过学习和研究源码,我们可以优化监控指标、添加新功能,甚至贡献代码回给开源社区。

    console.log控制台信息前台显示代码.zip

    总结来说,`console.log控制台信息前台显示代码.zip` 文件提供的是一种解决JavaScript日志信息前端显示的方案,通过`screenlog.js` 插件实现了控制台与前端界面的日志同步,提高了开发和调试的效率。在实际项目中,...

    console-remote:用于Node.js和浏览器的远程JavaScript Console.Re连接器

    连接器脚本扩展了console对象,从而添加了新的方法来通过以下方法将消息发送到远程记录器: console.re.type(); console.re.assert(); console.re.time(); console.re.timeEnd(); console.re.now(); console.re....

    sockjs.min.js资源

    "sockjs.min.js"是一个JavaScript库,专门用于在不支持原生WebSocket的浏览器上实现WebSocket协议的兼容性。 SockJS是WebSocket的一个跨浏览器实现,它在WebSocket不被支持或者被防火墙阻断的情况下提供了一种备选...

    Dexie.js基本使用-前端大容量存储IndexedDB 的包装库,可运行代码

    Dexie.js是一个轻量级的JavaScript库,它为浏览器中的IndexedDB提供了一个易用且强大的API。IndexedDB是Web浏览器提供的一个原生的本地存储解决方案,允许应用程序在客户端存储大量数据。然而,由于其复杂的API,...

    JavaScript中的console.trace()函数介绍

    在文件提供的代码示例中,通过在doSubTask函数中添加console.trace()语句,我们可以在控制台看到从doTask函数调用doSubTask函数到执行console.trace()时的完整调用路径。 此外,console.trace()不仅能够打印出函数...

    js console.log打印对象时属性缺失的解决方法

    在JavaScript开发中,console.log()是用来调试代码的常用方法之一,它可以帮助我们追踪程序的执行流程以及变量的状态。然而,在调试对象时,可能会遇到对象属性不完整的问题,这会对我们获取正确的信息造成困扰。在...

    Node.js-console-log-level-最简单的记录器支持日志级别和自定义前缀

    在`console-log-level-master`这个压缩包中,可能包含了`console-log-level`的源代码,你可以查看其实现细节,学习如何扩展Node.js的内置对象,以及如何处理配置和输出逻辑。这个库的源码对于理解如何编写简洁且实用...

    vconsole.js

    例如,你可以使用`vconsole.hide()`和`vconsole.show()`来隐藏或显示控制台,或者使用`v.console.clearLog()`清除所有日志记录。 此外,vconsole.js还支持插件扩展,允许开发者根据实际需求添加自定义功能。通过...

    jest-fail-on-console:使用console.error()或console.warn()进行笑话测试的实用程序失败

    控制台上的笑话失败 使用console.error()或console.warn()进行...在Jest的setupFilesAfterEnv选项中使用的文件中,添加以下代码: import failOnConsole from 'jest-fail-on-console' failOnConsole ( ) // or wi

    IE 中使用 Console

    `console` 对象是 Web 开发人员常用的工具,尤其在JavaScript编程中,它允许我们输出信息、跟踪错误、记录性能等。在 IE 中,虽然其内置的开发者工具可能与其他现代浏览器(如 Chrome 或 Firefox)有所不同,但基本...

    在带有@deprecated标记的函数中添加console.warn语句。-JavaScript开发

    babel-plugin-log-deprecated向带有JSDoc @deprecated标记的函数添加console.warn语句。 console.warn添加在函数主体的开头。 转译示例动机babel-plugin-log-deprecated向带有JSDoc @deprecated标记的函数添加...

    uploader.js使用说明

    ### uploader.js 使用说明 #### 一、概述 `uploader.js` 是一个基于 WebUploader 封装的文件上传组件,简化了文件上传的操作流程,并提供了丰富的功能支持,如自定义上传流程回调函数、进度条显示、本地及远程文件...

Global site tag (gtag.js) - Google Analytics