前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RosinVSJSConsole

RosinVSJSConsole

作者头像
IMWeb前端团队
发布2019-12-03 17:16:08
3740
发布2019-12-03 17:16:08
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队

本文作者:IMWeb helondeng 原文出处:IMWeb社区 未经同意,禁止转载

Rosin是一个Fiddler插件,协助开发者进行移动端页面开发调试。

特性
  • 可配置的页面匹配规则
  • 拦截console
  • 日志内容的存储,展示,过滤
  • 脚本运行错误捕获原理
  • 首先在fiddler里面配置了匹配规则
  • 访问的页面进过fiddler之后,匹配规则会生效,如命中,则在返回的内容中注入脚本。
  • 脚本重写了console的各种方式(也监听了onerror事件)
  • 将console打出的各种消息push到消息队列
  • 队列达到阈值或者间隔的时间到,就将消息通过xhr发送到 http://__rosin__.qq.com
  • rosin插件在fiddler中捕获上面的请求(并且隐藏了,所以看不到这个请求),将请求的body部分显示到面板上面
  • 将log存储到本地 D:\Program Files (x86)\Fiddler2\Scripts\Rosin\Log
代码语言:javascript
复制
            add: function() {
            Array.prototype.push.apply(this._queueArr, arguments);
            // 定时发送消息
            clock.start();

            //队列达到阈值就触发上传
            if (this._queueArr.length >= THRESHOLD) {
                this._post(this._queueArr.splice(0, this._queueArr.length));
                return;
            }
        }

Log 格式:

JSConsole

JSConsole是一个JS命令行调试工具。

如何使用
  • http://jsconsole.com/中输入:listen创建一个session(主要是生成一个GUID)
  • 在页面中引入脚本
代码语言:javascript
复制
    <script src="http://jsconsole.com/remote.js?FAE031CD-74A0-46D3-AE36-757BAB262BEA"></script>
原理
  • 引入的remote.js脚本创建一个隐藏的iframe,Url指向了http://jsconsole.com/remote.html,并且把上面的GUID带上
  • 重写console中的方法,这里的问题是:如何把消息push到jsconsole.com
  • 页面调用console等方法时,实际通过postMessage是向iframe发送了一条消息。
代码语言:javascript
复制
        log: function () {
         var argsObj = stringify(arguments.length == 1 ? 
                  arguments[0] : [].slice.call(arguments, 0));
        ar response = [];
        [].forEach.call(arguments, function (args) {
            response.push(stringify(args, true));
        });

        var msg = JSON.stringify({ response: response, 
              cmd: 'remote console.log', type: msgType });

        if (remoteWindow) {
        remoteWindow.postMessage(msg, origin);
        } else {
            queue.push(msg);
        }    
        msgType = '';
        }
  • iframe中内嵌的页面收到消息后,通过EventSource向server发送信息内容(类似于socket)
  • 日志显示在jsconsole.com上面
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-04-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 特性
  • JSConsole
    • 如何使用
      • 原理
      相关产品与服务
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档