WKWebView捕获JS Error 跨域解决

探讨UIWebView和WKWebView在处理跨域JS错误时的问题与解决方案,包括如何配置允许跨域访问,以及在跨域环境下正确捕获JS错误的方法。
该文章已生成可运行项目,

通过window.onerror捕获到js error以后,发现js error都是Script error,毫无参考价值,webkit源码查看可知,script资源加载的地方,是进行了同源策略判断的,如果是非同源资源,errorMessage就被写死了Script error
在这里插入图片描述

File跨域漏洞

UIWebView虽然已经被遗弃,但依然还有很多app继续使用,且最新版本的iOS也会兼容UIWebView。由于UIWebView本身存在严重的跨域漏洞,所以只要使用UIWebView都有可能存在跨域漏洞。漏洞原因在于UIWebView的WebKitAllowUniversalAccessFromFileURLs和WebKitAllowFileAccessFromFileURLs默认开启,导致通过js可以访问沙箱内的文件,甚至可以静默上传文件到远端。

WKWebView默认allowFileAccessFromFileURLs和allowUniversalAccessFromFileURLs选项为false,但如果开发者开启了这两个API,同样存在跨域漏洞。但是如果开启了这两个API,我们就可以让WKWebView支持跨域JS Error的捕获,代码如下所示:

//存在跨域漏洞
[configuration setValue:@TRUE forKey:@"allowUniversalAccessFromFileURLs"];
[configuration.preferences setValue:@"TRUE" forKey:@"allowFileAccessFromFileURLs"] ;

但是在这样的情况下,也会存在毫无参考价值的Script error,我理解是因为虽然WKWebView支持了跨域JS Error捕获,但是本身的js资源也要支持跨域,静态资源请求需要加多一个Access-Control-Allow-Origin头部,同时script引入外链的标签需要加多一个crossorigin的属性

参考文章

1、https://www.baidufe.com/item/7ee009bfbcd0fe94bd3e.html
2、https://www.cnblogs.com/cathsfz/p/how-to-capture-and-analyze-javascript-error.html
3、https://stackoverflow.com/questions/50229935/wkwebview-get-javascript-errors
4、https://mabin004.github.io/2018/06/25/iOS%E5%BA%94%E7%94%A8%E6%B2%99%E7%AE%B1/
5、http://rapheal.sinaapp.com/2014/11/06/javascript-error-monitor/

本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值