热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端非常—跨终端及时追踪

我已沦为IE狗!!!从9月份一开始,新项目正式启动,产物以客户端的情势宣布,如今用的是.NET的WebBrowser内嵌网页的情势开辟,关于后端来讲,一切都是那末天然、简朴;可关于

我已沦为IE狗!!!

从9月份一开始,新项目正式启动,产物以客户端的情势宣布,如今用的是.NET的WebBrowser内嵌网页的情势开辟,关于后端来讲,一切都是那末天然、简朴;可关于前端来讲,完整将我带入到了IE的黑洞,自此万劫不复!说实话,我心田非常蔑视这个WebBrowser,因为windows绑定了IE,WebBrowser默许运用IE内核,按理说如今win7及以上体系占多数,所以这个内核怎样也是IE9+占多数才对啊,可恶的是,浩瀚体系都是重装的非正版阉割后的体系,可恶的是,WebBrowser在这些体系哪怕是装的win7、IE11都调的是IE7,可恶的是顺序对其不可控!可恶的是这个挪用的IE7与阅读器的IE7还不太一样,我叫它非7非8,偶然我在IE7阅读器里看到一个模样,到了黑壳子里弹出检测效果是IE7,模样竟然和阅读器上不一样,完整(想骂人。。。)不在套路上!而且没有控制台,恣意一个非常,不管是不是影响顺序,都邑弹出一个讨人厌的剧本毛病的提醒框!因为我在阅读器上调试和开辟的,所以一开始并不知道会有这些题目,即使当时我兼容到了IE7,到了壳子内里又是一番乱七八糟的题目!当时每天放工回家躺在床上,我都在疑心自身的前端之路是不是是走进了一条死胡同,完整看不到光,说好的炫酷呢,说好的大前端呢?尼玛这都什么鬼?

欣喜的是后端同砚在主动研讨怎样切换到webkit的壳子,基于一些不可预知的题目,以及项目催的太紧,到如今为止,我依旧每天面对着IE7891011。。。。。不要拦我。。。让我哭会儿。。。

话说照样要做个顽强的孩子!自身挑选的路,再苦再累也要咬牙走完呀;一方面,兼容题目是前端不可避免的题目;另一方面,既然眼下没有更好的计划,只要靠自身一步步走稳脚下的路了;

皇天不负苦心人,终究让我磨出了一个ErrorInspector模块!

基于以上可恶的让人疑心人生的题目,起首处理以下题目:

1、兼容到IE7;

2、非常的反应与追踪(支撑跨域);

3、屏障掉谁人讨人厌的剧本毛病提醒框;

4、要跨终端,比方谁人丑的不要的IE壳子,不可调试;

5、毛病及时上报并关照和展现;

6、一并追踪与后端交互的毛病,比方:500、404,把Jquery的ajax拉进来;

7、包装try_catch,多用try_catch;

因为要兼容到IE7,那末基础库用Jquery一定最好了,加上自身日常平凡造的一些模块和组件以及Jquery的插件,基础够开辟用了;不幸的我再次与牛逼的React、Angular擦肩而过了;如今以Nodejs的模块化体式格局开辟,用webpack打包兼并,如今觉得还拼集;

最初的主意是,经由过程window.onerror和try_catch捕捉并上报毛病到一个自力的毛病网络站点,不需要后端合营,自身用Express造一个简朴的站点就是,经由过程H5的webSocket和Node的Socket.io及时相应上报的毛病,假如已翻开阅读器端无需革新即可收到关照,也许直接发送邮件提醒,到达跨终端及时追踪上报;假如能够的话,在Web上能够做更多事情,比方,图形化剖析和展现,罕见毛病的处理要领的展望和提醒,假如是线上网络站点还能够对毛病极为处理要领做分类网络,供阅读者参考;总之,face to error,just do it !

因为题目终究上报到我这,所以就不存在阅读器兼容题目了,固然选最好的谷歌了,BSIE!!!;没做太多优化,初版毛病反应展现的页面大概是这个傻模样:

《前端非常 — 跨终端及时追踪》

固然,图片里是测试的效果,每条睁开有更多毛病的概况,包含毛病激发的文件地点、行号、毛病范例、阅读器版本、时候、地点页面、触发节点等;现实发明,window.onerror捕捉的毛病并不老是很细致,最好是多用包装好的try_catch去主动上报,才会比较轻易定位毛病源,多用try_catch是个好习惯;因为不免存在跨域的题目,默许运用new Image的体式格局GET数据,固然,这不是必需的,支撑自定义上报地点和上报要领;至于屏障掉谁人讨人厌的剧本毛病提醒框,实在很简朴,在window.onerror末了return true就是的,但是在谷歌里就会屏障掉控制台输出的内容,最好在线上环境运用,毕竟当地开辟还得在控制台里调试;

因为Jquery的Ajax运用迥殊天真,所以做好全局去捕捉Ajax与后端交互的毛病;看看Jquery的Ajax罕见用法:

// 以GET为例
$.ajax({
url:'',
success:function(data){},
error:function(){}
});
$.get(url,data,function(data){});
$.get(url,data).success(function(data){}).error(function(){});
$.get(url,data).then(function(data){},function(err){});
// ...

这么多种用法,每次都去捕捉error事宜,然后在内里上报,一定是相称不靠谱的;Jquery是很好用的,能够经由过程设置全局的error事宜来捕捉上面各种体式格局下的毛病,爽不爽?比方如许:

$.ajaxSetup({
timeout:setAjax.$.timeout,
error: function(xhr){
setTimeout(function () {
util.getArgType(setAjax.$.onError)=='function'?setAjax.$.onError(xhr):alert(xhr.status+','+xhr.statusText);
}, 1);
}
});

不过这类毛病平常后端的能够性大些,前端罕见的就是这里的参数没传好,激发的后端毛病,固然能够挑选屏障不上报,或简朴的提醒个服务器非常就好了;

ErrorInspector的用法:

1、最好放在各大library的背面,你写的JS前面,因为框架自身平常不会激发毛病,主如果监控自身写的代码能够存在的未预知的非常;

2、初始化设置:

ErrorInspector.COnfig={
url:'http://localhost:2333/ErrorInspector/xiaofeng', //上报地点
qs:{
id:location.host, //默许以当前域为id
page:location.host+location.pathname,//毛病页面地点
from:Url, //毛病泉源的地点
row:Number, //毛病行号
col:Number, //毛病列号
msg:String, //毛病概况
browser:util.Browser, //阅读器范例及版本,默许几大主流阅读器,后续完美
time:util.fmtTime(), //毛病触发的时候
inspector:String, //上报者window|user|log......
// ...其他参数
ext:'hufeng' //扩大的参数
},
$:{
timeout:Number, //Jquery的Ajax超时设置,会触发onError
onError:function(xhr){} //全局的Jquery的Ajax毛病捕捉
},
submit:function(data){}, //自定义上报体式格局,回调了上报内容
IgnoreFromJSPattern:/reg/ig, //屏障毛病泉源的地点,比方第三方的广告
IgnoreMsgPattern:/reg/ig, //屏障上报的音讯内容,比方没太大意义的script.error
IgnoreBrowserError:0|1 //是不是屏障控制台,重要屏障掉谁人IE上憎恶的弹框
}

ErrorInspector.Config.qs里的参数平常无需干涉,毛病触发时会自身网络上报;

3、Tryit(function(report,log){});

包装好的try_catch,回调的ErrorInspector.report和ErrorInspector.log实在迥然不同,除了try_catch里的上报外,能够用回调值继承自定义上报;平常用这个函数包装代码块;

4、ErrorInspector.report({name:value});

主动上报;

5、ErrorInspector.log;

模仿简朴的console.log,实在更像alert,能够充任统计代码用,也许还需革新;

6、后端运用Express和Socket.io,玩过H5的webSocket的同砚立马就懂了,不诠释;

这些天被IE忙活坏了,例子未整理,唉,实在IE并不是那末恐怖!ErrorInspector.js仅作分享,才能有限,迎接革新!github地点:https://github.com/famanoder/…

假如你已在路上,就英勇的向前吧!

原文来自:http://famanoder.com/bokes/58…


推荐阅读
  • 本文介绍如何在Windows 7操作系统中配置支持HTML5多点触控功能的设备,同时探讨了HTML5在开发Windows桌面应用程序中的可能性。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 在使用 MUI 框架进行应用开发时,开发者常常会遇到 mui.init() 和 mui.plusReady() 这两个方法。本文将详细解释它们的区别及其在不同开发环境下的应用。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 使用Bootstrap创建响应式渐变固定头部导航栏的方法
    本文详细介绍了如何利用Bootstrap框架构建一个具有渐变效果的固定顶部响应式导航栏,包括HTML结构、CSS样式以及JavaScript交互的完整实现过程。适合前端开发者和学习者参考。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • Web App vs Native App:未来的移动应用趋势
    随着移动互联网的发展,Web App和Native App之间的竞争日益激烈。对于开发者而言,选择哪一种技术路径更为明智?本文将深入探讨两种应用模式的特点及未来趋势。 ... [详细]
  • 利用CSS3和React实现数字滚动动画组件
    在前端开发中,数字滚动动画是一个常见的需求。本文将详细介绍如何使用CSS3和React构建一个数字滚动动画组件,包括组件的代码实现和样式设计。如果您对HTML版本感兴趣,欢迎留言获取。 ... [详细]
  • select下拉箭头改变,兼容ie8/9
    各个浏览器下select默认的下拉箭头差别较大,通常会清除默认样式,重新设计<html><head><metacharsetutf-8> ... [详细]
  • HTML5实现逼真树叶飘落动画详解
    本文详细介绍了如何利用HTML5技术创建一个逼真的树叶飘落动画,包括HTML、CSS和JavaScript的代码实现及优化技巧。 ... [详细]
  • 使用 NDB 提升 Node.js 应用调试体验
    本文介绍了由 Google Chrome 实验室推出的新一代 Node.js 调试工具 NDB,旨在为开发者提供更加高效和便捷的调试解决方案。 ... [详细]
  • 本文介绍如何使用Python编写一个简单的爬虫程序,从知乎问题页面抓取美腿图片。环境配置包括Windows 10操作系统,Python语言及其相关库。 ... [详细]
  • 如何清空Layui树结构
    本文将详细介绍如何使用Layui框架清空树形结构,包括创建树、添加节点以及实现清空功能的具体步骤。通过本文,您将能够掌握Layui树的管理技巧。 ... [详细]
author-avatar
mobiledu2502884243
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有