移动web开发调试工具AlloyLever介绍

简介

web调试有几个非常频繁的刚需:看log、看error、看AJAX发包与回包。其他的如timeline和cookie以及localstorage就不是那么频繁,但是AlloyLever都支持。如你所见:

特征

  • 点击alloylever按钮之间切换显示或隐藏工具面板

  • Console会输出所有用户打印的日志如console.[log/error/info/debug/debug]

  • Console会输出所有的错误信息(脚本错误和网络请求错误)

  • XHR面板会输出所有(XMLHttpRequest)AJAX请求和服务器端返回的数据

  • Resouces面板会输出所有的Cookie信息和LocalStorage

  • TimeLime面板会输出页面相关的生命周期里的时间段耗时情况

演示

http://alloyteam.github.io/AlloyLever/

Install

可以通过npm安装:

npm install alloylever

使用

你的页面只需要引用一个js即可!

<script src="alloylever.js"></script>

但是需要注意的是,该js必须引用在其他脚本之前。至于为什么,看下面的原理。

Console截获

window.console = {wc: window.console};var self = this;['log', 'error', 'warn', 'debug', 'info'].forEach(function (item) {console[item] = function (msg) {this.wc[item](msg);self.log(msg, item);}});

重写了console方法,并且保存下window下真正的方法进行执行,并且注入自己的事件。

AJAX截获

var XHR = window.XMLHttpRequest;window.XMLHttpRequest=function(){var xhr = new XHR();checkSuccess(xhr);return xhr;};window.XMLHttpRequest.realXHR = XHR;var self=this;function checkSuccess(xhr) {if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {self.option.xhrs.push({url:xhr.responseURL, json:JSON.stringify(JSON.parse( xhr.responseText), null, "\t")})    }else if(xhr.status>=400) {console.error(xhr.responseURL +' '+xhr.status+' ('+xhr.statusText+')')    }else{window.setTimeout(function () {checkSuccess(xhr);}, 0);}}

如上面所示,重写了XMLHttpRequest对象。用户new的对象全部为重写后的,返回的是真正的。这样就可以拿到所有用户创建的XMLHttpRequest对象的实例进行监听。

Error截获

其中error包含两部分,第一部分是js报的错误,通过下面的方式截获:

window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {console.error('Error: ' + errorMsg + ' Script: ' + url + ' Line: ' + lineNumber        + ' Column: ' + column + ' StackTrace: ' + errorObj);}

这里执行的时候console已经被重写了。所以自己的console面板也能看到错误。

第二部分是资源加载失败报的错,通过遍历HTML dom节点拿到所有的 js/css/img,然后再次发送请求。js和css通过XMLHttpRequest发请求,监听状态。,img通过new Image(),监听onerror。具体代码参见:https://github.com/AlloyTeam/AlloyLever/blob/master/src/component/alloy_lever/index.js

其他

Timeline通过timing.js获得所有信息,timing.js基于window.performance封装的类库。Cookie和localStorage通过js遍历得到。

相关

Github: https://github.com/AlloyTeam/AlloyLever
Issues: https://github.com/AlloyTeam/AlloyLever/issues

欢迎试用反馈。

原文地址:http://www.cnblogs.com/iamzhanglei/p/5477500.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle入门(十三A2)之单行函数

一、函数介绍 功能&#xff1a;改变数据输出形式或进行数据运算输出二、单行函数函数格式 函数说明abs(n) 返回n的绝对值floor(n) 返回小于等于n的最大整数ln(n) 返回n的自然对数&#xff…

22.IO与显示器

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》&#xff0c;内容非常棒&#xff0c;墙裂推荐&#xff1b; 2.显示器是输入型外设&#xff1b; 3.本章主要内容是讲 显示器是如何被驱动的&#xff1b;或操作系统是如何让用户来使用显示器的&#xff1b; 4.Pri…

d3 i5 神舟精盾k480n_神舟精盾k480n i5 d3和精盾i5 d1哪个好?

(这是D3的数据)主板芯片组IntelHM76CPU系列英特尔酷睿i53代系列CPU型号Intel酷睿i53210MCPU主频2.5GHz最高睿频3100MHz总线规格DMI5GT/s三级缓存3MB核心类型IvyBridge核心/线程数双核...(这是D3的数据)主板芯片组Intel HM76CPU系列英特尔 酷睿i5 3代系列CPU型号Intel 酷睿i5 32…

[开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计

一 &#xff0c;为什么要造轮子 有兴趣的同学可以去各大招聘网站看一下爬虫工程师的要求&#xff0c;大多是JAVA&#xff0c;PYTHON甚至于还有NODEJS&#xff0c;C&#xff0c;再或者在开源中国查询C#的爬虫&#xff0c;仅有几个非常简单或是几年没有更新的项目。从我看的一些文…

Oracle入门(十三B)之高级查询(上)

下章&#xff1a;Oracle入门&#xff08;十三C&#xff09;之高级查询&#xff08;下&#xff09; 一、多表格查询 &#xff08;1&#xff09;定义将两个或两个以上的表格&#xff0c;按照一定的关系连接起来进行查询。&#xff08;2&#xff09;多表格查询分类 连接查询嵌套查…

23.键盘

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》&#xff0c;内容非常棒&#xff0c;墙裂推荐&#xff1b; 2.键盘 是输出型外设&#xff1b; 【1】外设工作原理 【图解】外设工作原理&#xff1a; 步骤1&#xff1a;Cpu向外设控制器发出指令&#xff08;如…

like左匹配索引失效_Mysql索引失效的情况

一、前提条件1、创建三张测试表&#xff1a;DROP TABLE IF EXISTS user;CREATE TABLE user (idint(11) NOT NULL,name varchar(25) DEFAULT NULL,ageint(11) NOT NULL DEFAULT 0,update_time datetime DEFAULT NULL,first_name varchar(25) DEFAULT NULL,last_name varchar(25)…

基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

距离上一篇OpenAuth.net的文章已经有5个多月了&#xff0c;在这段时间里项目得到了很多朋友的认可&#xff0c;开源中国上面的Star数接近300&#xff0c;于是坚定了我做下去的信心。最近稍微清闲点&#xff0c;正式推出1.0版&#xff0c;并在阿里云上部署了一个在线演示&#x…

24.原生磁盘的使用

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》&#xff0c;内容非常棒&#xff0c;墙裂推荐&#xff1b; 2.磁盘操作抽象 第1层抽象&#xff1a;通过盘块号读写磁盘&#xff08;或逻辑盘块号&#xff09;&#xff1b;第2层抽象&#xff1a;用队列缓存多个…

Oracle入门(十三C)之高级查询(下)

上章&#xff1a;Oracle入门&#xff08;十三B&#xff09;之高级查询&#xff08;上&#xff09; 四、常见组函数 SUM、AVG、COUNT、MIN、MAX分组函数忽略null 值。不能在WHERE 子句中使用组函数。MIN 和MAX 可用于任何数据类型&#xff1b;SUM、AVG只能用于数字数据类型五、子…

微软将降低Visual Studio对操作系统的影响

在过去几年中&#xff0c;为了将Visual Studio变成Windows上的第一开发工具&#xff0c;而不管用户的目标平台是什么&#xff0c;微软作出了重大努力。最近收购Xamarin及通过大力支持开源工具来支持非Windows设备&#xff0c;极大地增加了它对于各类开发人员的用处。这一做法的…

代码设置margintop_关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)...

关于元素设置margin-top能够改变body位置的原因及解决(子元素设置margin-top改变父元素定位)起因&#xff1a;在进行bootstrap的.navbar-brand内文字设置垂直居中时采用line-height高度&#xff0c;无法居中&#xff0c;发现源码.navbar-brand 设置了 padding: 15px 15px;(默认…

Oracle入门(九A)之用户的权限或角色

转载自 查看Oracle用户的权限或角色 前几天被问到一些关于权限和角色的问题&#xff0c;今天抽时间总结一下如何查看Oracle用户的权限或角色&#xff0c;在之前的博文中&#xff0c;写过 SYS,SYSTEM,DBA,SYSDBA,SYSOPER的区别与联系 以及 Oracle中定义者权限和调用者权限案例分…

25.从生磁盘到文件

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》&#xff0c;内容非常棒&#xff0c;墙裂推荐&#xff1b; 2.文件&#xff1a;煮熟的磁盘&#xff0c;或熟磁盘&#xff1b; 本节的主要内容是讨论 如何从文件得到盘块号&#xff1b; 3.磁盘操作抽象&#xf…

Storm 1.0.1发布 .NET 适配也已到来

Apache Storm 1.0.0刚发布不久&#xff0c;1.0.1版本也在几天前到来&#xff1b;该版本主要是完成一些BUG修复和小的改进&#xff0c;通过一段时间新版本的使用&#xff0c;特将个人感受和一些遇到的问题归纳如下&#xff1b;另外 .NET 版本的 Storm 适配器也已经发布&#xff…

布隆过滤器速度_详解布隆过滤器的原理、使用场景和注意事项

今天碰到个业务&#xff0c;他的 Redis 集群有个大 Value 用途是作为布隆过滤器&#xff0c;但沟通的时候被小怼了一下&#xff0c;意思大概是 “布隆过滤器原理都不懂&#xff0c;还要我优化&#xff1f;”。技术菜被人怼认了、怪不得别人&#xff0c;自己之前确实只是听说过这…

Oracle入门(十四)之PL/SQL

一、PL/SQL 基本语法 PL/SQL语言是模块式的过程化SQL,是oracle公司对SQL的扩展。 &#xff08;1&#xff09;&#xff08;2&#xff09;&#xff08;3&#xff09;&#xff08;5&#xff09;&#xff08;6&#xff09;&#xff08;7&#xff09;数据类型Number 数字型Varchar2 …

26.文件使用磁盘的代码实现

【README】 1.本文内容总结自 B站 《操作系统-哈工大李治军老师》&#xff0c;内容非常棒&#xff0c;墙裂推荐&#xff1b; 2.文件内容复习&#xff1a; 1&#xff09;如何从生磁盘抽象为文件&#xff1f; 核心是从字符流位置算出盘块号&#xff1b;2&#xff09;如何算出盘…

.NET Core全新的配置管理[共9篇]

提到“配置”二字&#xff0c;我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影&#xff0c;那就是我们再熟悉不过的app.config和web.config&#xff0c;多年以来我们已经习惯了将结构化的配置信息定义在这两个文件之中。到了.NET Core的时候&#xff0c;很多我们…

redis存opc_KEPServerEX6完整免费版

KEPServerEX6完整免费版是一款先进的连接平台&#xff0c;主要用于为您的应用程序提供单一来源的工业自动化数据&#xff0c;通过连接、管理、监视和控制不通的自动化设备和应用程序来实现工业数据。具有严谨的技术特征&#xff0c;支持多达250种以上的通讯协定&#xff0c;可连…