位置: 编程技术 - 正文

window.onerror()的用法与实例分析

编辑:rootadmin

推荐整理分享window.onerror()的用法与实例分析,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

onerror语法使用

onerror 默认有三个入参:

&#;msg: 错误信息&#;url:错误所在文件&#;line: 错误所在代码行,整型window.onerror = function(msg, url, line){ // some code }; 对于 <body onerror=”some code”>形式的,可以通过arguments[0]、arguments[1]、arguments[2]依次获取参数。

js中我们最常用的就是js容错

基本特性可以通过设置returnValue=true,或直接return true来阻止浏览器显示错误信息。但不会阻止script debuggers弹出的调试框。只有运行错误才会触发onerror,语法错误不会触发。

以下三种方式可以引发onerror:

&#;运行时错误,例如无效的对象引用或安全限制&#;下载错误,如图片&#;在IE9中,获取多媒体数据失败也会引发<script> 标签不支持onerror。

定义在 <body> 标签上的onerror属性相当于window.onerror (经测试,Firefox、Opera支持,IE9、chrome无反应)。

浏览器兼容性

QuirksMode列出的各浏览器对onError的支持情况

&#;Chrome +&#;Firefox 6.1+&#;Internet Explorer 5.5+&#;Safari 5.1+&#;Opera .+ (QuirksMode 测试到.尚不支持,我手头上的.已支持)除window对象外,支持 onerror 的元素:

&#;<img> 全支持&#;<script> IE9/IE/safari 5.1+/chrome + 支持<css> 和 <iframe> 不支持onerror。

问题与解决方案

window.onerror()的用法与实例分析

对于引用外部js文件中的错误,Webkit和Mozilla类浏览器会篡改原始的错误信息,导致最后onerror获取到的三个入参为:

例如 能执行非同源下的第三方js文件。&#;<script> 元素会忽略加载的文件的MIME类型,而当作脚本来执行。在攻击场景中,恶意页面引入了正常页面的js文件,js文件会自动执行,若发生异常触发的报错信息,可能会泄漏某些敏感数据。这些信息最终会被恶意页面的window.onerror处理。

经测试,存在此特性的浏览器(当前最新版)有Firefox、Chrome、Safari、Opera。

Adam Barth(work on the security of the Chrome browser at Google)建议的解决方案是使用CORS (Cross-Origin Resource Sharing)。

简言之,当在页面中 <script> 引入外部js文件时,增加一个属性crossorigin(类似于<img> 的CROS属性)。服务器在接受到请求时,在HTTP Header里增加一个授权字段(值可以是具体的某个域名):

Access-Control-Allow-Origin: *

浏览器检测到此js已经授权此页面所在域名,则不用再篡改由此js传递到window.onerror的错误信息了。

经测试,此方案尚未被浏览器实现。已经在Chrome、Firefox的较新版本中支持。

其他参考资料

Internet Explorer Firefox errors and runtime errors = function(sMessage,sUrl,sLine){};

onerror函数的三个参数用于确定错误确切的信息,代表的意思依次为:错误信息;发生错误的文件;发生错误的行号。

示例:

上面示例的方法很值得借鉴。 在捕获js错误时,我们通常使用try{}catch(e){}的方式,然后通过e.errorMessage等方式获取错误信息然后报告错误。但对于onerror事件可能很少问津,我们是否思考过如何报告错误所在的行号?如果想过这个是否也被这个问题所困扰过,是否认为在js里不可能捕获错误的行号呢&#;其实本人就遇到上述的几个问题,今日读某人写的一段js代码顿然发现了onerror事件,要说onerror这个时间也是n久以前就知道了,但对于其所带有的三个参数和其特殊性质却一直没有去了解过。经过自己的研究测试,对onerror事件有了一些新的认识和了解。在页面没有错误时,window.onerror事件是不存在的,也就是null(废话!没出错如果onerror出现还正常吗?)我们一般通过函数名传递的方式(引用的方式)将要执行的操作函数传递给onerror事件,如window.onerror=reportError;window.onerror=function(){alert('error')},但我们可能不知道该事件触发时还带有三个默认的参数,他们分别是错误信息,错误页面的url和错误行号。要知道这个可是事件,就如onclick和onmouseover等事件一样,但它是有参数。我们可以这样测试。

首先将testError方法绑定给onerror事件,然后在test方法里触发一个错误,在IE中执行时我们发现如下提示:--------------------------- Microsoft Internet Explorer --------------------------- 参数个数:3个 参数1:'error' 未定义 参数2: 参数3: --------------------------- 确定 --------------------------- 可以发现,当出错时函数testError捕获到了三个参数。通过将函数绑定到onerror事件就可以在页面出错时捕获以上三个参数。 在测试中还发现以下一些问题:1、通过在函数末尾加上return true,可以在函数出错时不会弹出系统的错误信息(IE)。2、如果页面出现多次错误,只捕获第一次错误并进行处理然后终止后面程序的执行。 3、onerror事件并不能捕获所有的错误,只能捕获函数外或函数内错误(??这个是什么意思,可不是开玩笑呢),如 adasdf; function test(){ aaaa; } 可以捕获到adasdf未定义的错误 function test(){ aaaa; } 可以捕获到aaaa未定义的错误,而对于functiona test(){}或function test()dd{} 的错误却不能捕获而会直接弹出系统错误信息。4、onerror在IE和FF等浏览器执行方式是一样的,而且都包含这三个参数。

Bootstrap树形控件使用方法详解 一、JQuery树形控件Jquery树形控件是一款基于JQuery+bootstrap、完全通过js和样式手写出来的非常轻量级的控件,网上很多地方都能看到它的影子。它功能简

js+css绘制颜色动态变化的圈中圈效果 本文实例讲述了js+css绘制颜色动态变化的圈中圈效果。分享给大家供大家参考,具体如下:运行效果截图如下:具体代码如下:htmlheadtitlecircle/titlestylety

封装属于自己的JS组件 一、扩展已经存在的组件1、需求背景很多时候,我们使用jquery.ajax的方式向后台发送请求,型如$.ajax({type:"post",url:"/User/Edit",data:{data:JSON.stringify(postdata)},

标签: window.onerror()的用法与实例分析

本文链接地址:https://www.jiuchutong.com/biancheng/382723.html 转载请保留说明!

上一篇:javascript常用函数(1)(javascript常用函数大全)

下一篇:Bootstrap树形控件使用方法详解(bootstrap 树形菜单)

  • 一般纳税人缴税
  • 个税由公司承担的账务处理
  • 销售利税率计算公式及分析
  • 增值税征税范围及税率
  • 等线补交以前年度附加税会计分录
  • 销售固定资产清单怎么做
  • 六种无形资产有什么
  • 增值税专票开完就扣税是吗
  • 金蝶财务软件固定资产怎样计提折旧
  • 电子版发票怎么弄
  • 财务部门使用固定资产的折旧计入管理费用
  • 销售退回的会计分录金额怎么写
  • 过期食品翻新
  • 企业的期间费用包括什么
  • 员工销售家具取得的工资怎么写分录?
  • 调离工作岗位是什么处分
  • 个人付款可以开发票吗
  • 个人独资企业核定
  • 调用核心征管业务服务节点报错
  • 运输发票抵扣税率是有多少?
  • 一般纳税人运费计入什么科目
  • 怎么查找使用手机的时间
  • 无形资产摊销可以按照其价值和使用情况
  • 营改增后建筑业分包怎么交税
  • 长期股权投资用交印花税吗
  • 培训费和差旅费可以一起报嘛
  • 如何增加发票数量和额度
  • 高新补贴是什么意思
  • 跨年的工会经费怎么做分录
  • 进口增值税可以抵扣销项税额吗
  • 原始股东减持要交多少税
  • 劳务派遣公司的作用
  • 利用网速测试器测试
  • 微信聊天记录备份和恢复
  • 企业车间承包合同的法律效力
  • 销售农产品的进项税
  • 为员工租赁房屋产生的租赁费可以抵扣增值税和所得税吗
  • (二) Vue3 + Element-Plus 实现动态菜单栏
  • wordpress添加css
  • 划转国有划拨土地流程
  • 伫立枝头的旅鸫鸟,加拿大 (© marcophotos/Getty Images)
  • 马拉喀什的历史背景
  • 不发放工资怎么办
  • 前端种类
  • jquery 兄弟选择器
  • 数学建模python 怎么用
  • 个人完税证明有什么用途
  • 拆迁支出包括哪些
  • 科目余额表数据包括
  • 出租无形资产取得的收益计入什么科目
  • 市政绿化工程的施工方案
  • 以前年度无形资产摊销
  • 小规模纳税人指的是谁
  • 股东权益合计等于净资产吗
  • 以前年度损益调整借贷方向
  • 残保金逾期申报了补报会有罚款和滞纳金吗?
  • 冲估价入库怎么冲成本
  • 劳务派遣公司收入确认税收政策
  • 货已经收到未收到怎么办
  • 销项税现金流量附表如何指定
  • mysql解压安装教程5.7
  • mysql内网访问
  • mysql@变量
  • 介绍两个很常用的成语
  • sdis.exe
  • shell脚本实现自动化巡检报警发送邮箱
  • html5的全局属性
  • 批处理计算的特点
  • javascript创建对象的几种方法
  • jquery绑定keyup
  • javascript html5实现表单验证
  • js 构建树
  • js如何打印服务器图片
  • js模拟用户点击
  • 置顶怎么折叠起来
  • java web开发流程
  • 建筑企业税务清算流程图
  • 国网四川电力客户电话号码
  • 小规模纳税人开专票需要交税吗
  • 深圳市百旺信投资有限责任公司
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设