scripterror!意思是脚本错误。
访问者所使用的浏览器不能完全支持页面里的脚本,形成“脚本错误”。遇到“脚本错误”时一般会弹出一个非常难看的脚本运行错误警告窗口,而事实上,脚本错误并不会影响网站浏览,因此这一警告可谓多此一举。
,scripterror解决办法,一、ScriptError标准
scriptError是什么?
是外部加载的JS抛出反常的时分,出于安全方面的考虑,js过错信息中可能包括一些灵敏信息,比方用户名、权限提示等,希望能够把这类信息屏蔽。现在跨域的场景下会触发这种安全限制,window.onerror无法获得详细犯错信息,而只能得到Scripterror.
79552948-02f9-11e5-9923-44fbda98ddd0
http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#runtime-script-errors
二、处理ScriptError问题
呼应头添加access-control-allow-orgin(以下简称AC)
每个fucntion包裹try-catch
切面包裹进口函数,try-catch
1.呼应头添加access-control-allow-orgin
Access-Control-Allow-Origin回包header里设置答应cros的域
Access-Control-Allow-Credentials:true
Script标签添加crossorigin当1和2同时满意就具有了翻开scripterrors的钥匙,window.onerror就能获得详细犯错信息了
哪些浏览器能翻开mutederrors?
Chrome和Firefox支持,Safari和ie不支持,
所以跨域的js想在Safari下获取犯错概况信息,只能用try-catch了,onerror是无能为力了。
access-control-allow-orgin配置问题:
由于值不能设置多值,而且设置*,答应任何域名运用是一个很不安全的设置,所以一般会根据浏览器恳求头refer或则orgin,判别是不是白名单内的域名,是的就呼应回对应的域名或则*(呼应头不支持返回*.qq.com),。当然假如cdn只对一个事务服务也能够写死域名
script标签上面的crossorigin配置问题
1.anonymous(默许)
不能带cookie
副作用,当AC的设置不是*或者不等于origin时,js直接不加载
2.use-credentials
能带上cookie
副作用,当AC的设置不等于origin时,js直接不加载(不支持*通配符了)
其他奇葩的问题
由于浏览器的缓存,同一个资源的跨域头会被缓存,可是同一个网站中可能有不同域名恳求这个资源,所以会呈现资源跨域恳求失利
2.每个fucntion包裹try-catch
运用构建工具,对function进行包裹,try-catch,捕获到反常后进行上报
可是构建后生成的代码会对源代码添加大小
3.切面包裹进口函数,try-catch
对于基于AMD和jQuery的网站,简直一切事务函数都是通过回调异步触发的,所以咱们只需要将一切异步函数包裹起来就能够捕获到大部分过错:
setTimeou,setInterval
$.event.add和$.event.remove
AJAX
模块进口define或则require
setTimeou、setInterval
只针对w3c现代的浏览器的进行包裹,ie不进行包裹
$.event.add和$.event.remove
没有个dom都有这两个办法,咱们没有办法对悉数重写。可是咱们发现现在根本都会运用jquery或zepto,所以咱们对$.event.add和$.event.remove进行了切面处理。
AJAX
跟上面的相似,咱们不能重写ajax,可是前端开发都运用jquery,所以咱们重写了$.ajax
模块进口define或则require
现在前端开发根本都运用了模块化管理,所以模块化的进口是非常好的进口。
供给另一个处理思路
产生ScriptError的原因是因为恳求了跨域资源(比方cdn),能够灰度一部分用户,直接运用主域而不是cdn上的js,防止跨域问题。
Tips:本站所有资源均收集自互联网,分享目的仅供学习参考,资源版权归该资源的合法拥有者所有。
Tips:若本站所发布的资源侵犯到您的合法权益,请及时联系 hqteam@qq.com 删除!
暂无评论内容