图片-小白之家
图片-小白之家
图片-小白之家
图片-小白之家

script error(解决办法)

scripterror!意思是脚本错误。

访问者所使用的浏览器不能完全支持页面里的脚本,形成“脚本错误”。遇到“脚本错误”时一般会弹出一个非常难看的脚本运行错误警告窗口,而事实上,脚本错误并不会影响网站浏览,因此这一警告可谓多此一举。
图片[1]-script error(解决办法)-小白之家,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,防止跨域问题。

© 版权声明
THE END
喜欢就支持一下吧
点赞0分享
评论 抢沙发

请登录后发表评论

    暂无评论内容

图片-小白之家
图片-小白之家