一种解决WebView加载本地页面时跨域安全性问题的方法及终端技术

技术编号:30141258 阅读:64 留言:0更新日期:2021-09-23 15:04
本发明专利技术涉及一种解决WebView加载本地页面时跨域安全性问题的方法及终端,通过将JS层的第一资源加载请求封装成第二资源请求经由消息通道转到App层,App层根据第二资源请求读取本地资源并转换为预设格式的特定数据返回给JS层,JS层实例化该特定数据得到需要加载的资源,无需开启WebView跨域权限,避免产生系统WebView存在的安全漏洞,从而解决WebView加载本地页面时产生的跨域问题。本地页面时产生的跨域问题。本地页面时产生的跨域问题。

【技术实现步骤摘要】
一种解决WebView加载本地页面时跨域安全性问题的方法及终端


[0001]本专利技术涉及计算机软件领域,尤其涉及一种解决WebView加载本地页面时跨域安全性问题的方法及终端。

技术介绍

[0002]在移动端应用产品开发过程中,我们经常会用到系统提供的浏览器组件加载在线或本地的网页。
[0003]在Android系统中,这个系统组件叫WebView,同时,有时为了保证不同设备的兼容性,也会用到第三方实现的WebView,如腾讯的X5内核。
[0004]在iOS系统中,一般会使用系统提供的UIWebView(低版本系统才支持)以及WKWebView。
[0005]以下文字中,会将上述浏览器组件统称为WebView组件。
[0006]无论是哪一种WebView组件,都可以看成是一个小型的浏览器。如果要加载本地保存的网页,都有可能需要面临跨域问题。
[0007]跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。
[0008]同源策略:是指协议、域名、端口都要相同,其中有一个不同都会产生跨域。
[0009]例如http://a.com/a.js访问http://a.com/x/b.js文件,不会产生跨域问题,但若是想访问http://c.com/c.js,如果没有在被访问资源的服务器上做特殊配置,是不允许的。
[0010]针对跨域功能,无论是Android还是iOS系统,都提供了类似的接口,允许降低对加载的页面的安全限制,允许一定程度上的跨域资源访问。参见以下表格:
[0011][0012]上述表格展示的是两个系统的相关接口,通常,我们的本地包是不需要访问在线资源的,因此,第二个接口可以关闭,但是,第一个接口还是需要的,因为我们的课程包中,除了html页面与js文件外,还包含有图片、音频、文本文件、二进制文件等资源。
[0013]当两个接口都关闭时,通过脚本加载的音频、文本文件、二进制文件都会被WebView误判为跨域请求,即使它们是放在同一个目录里也一样。另外,通过网页中image标签动态加载的图片,在现有WebView实现的WebGL组件中,也会被误判为跨域资源,而不允许进行渲染。
[0014]但要是开启上述的接口,又会有可能引入安全漏洞(如CNVD

2017

36682、CNNVD

201801

515等),导致App在审核时被拒绝。
[0015]现有的解决方案,一般有以下几种:
[0016]对于Android,可以将本地包存储在源码的asset目录里,这样,不需要开启setAllowFileAccessFromFileURLs接口,也可以在本地页面中访问。但是缺点也很明显,网页包只能与App打包在一起,无法按需下载。
[0017]对于iOS,可以使用NSURLProtocol,拦截WKWebView的请求,自定义加载逻辑。但正常情况下,只有首页的加载会经由NSURLProtocol处理,后续资源由于WKWebView是运行在独立进程,要想让NSURLProtocol生效,只能用类似反射的机制去注册。优点很明显,思路清晰,无需修改网页加载逻辑,但是通过反射去调用隐藏接口,一旦iOS框架调整,该方案就失效了。
[0018]另一种方案是在App打开本地网页时,启动一个本地小型服务器,将本地页面转成一个本地地址的在线页面进行加载。由于我们要引用的资源都是在同一个目录下,而且html页面在其根目录,因此所有的资源都能被正常加载。但这种方案也有一个问题,如果本地要同时支持多个包运行,如页面A加载网页包1,页面B加载网页包2,从页面A能跳转到页面B,从页面B退回页面A时状态要保持跳转前的状态。那么就需要同时启动多个服务器,CPU、内存的占用也会随之上升,同时服务器的开启、销毁逻辑也需要精准控制。

技术实现思路

[0019](一)要解决的技术问题
[0020]为了解决现有技术的上述问题,本专利技术提供一种解决WebView加载本地页面时跨域安全性问题的方法及终端,能够优化WebView加载本地页面时跨域资源的加载。
[0021](二)技术方案
[0022]为了达到上述目的,本专利技术采用的一种技术方案为:一种解决WebView加载本地页面时跨域安全性问题的方法,包括:
[0023]S1、在资源加载逻辑中注入加载重定向模块,当JS层接收第一资源加载请求时,所述加载重定向模块拦截所述第一资源加载请求,并根据所述第一资源加载请求所请求加载的资源类型,将所述第一资源加载请求中的资源地址以及与所述资源类型适配的加载方式封装为第二资源加载请求,将所述第二资源加载请求通过消息通道发往App层;
[0024]S2、所述App层接收所述第二资源加载请求,并根据所述第二资源加载请求读取本地资源,并将所述本地资源转换为预设格式的特定数据,App层通过消息通道将所述特定数据返回给JS层;
[0025]S3、JS层接收到所述特定数据后,根据所述特定数据的资源类型执行与所述资源类型适配的实例化方法得到需要加载的资源。
[0026]本专利技术采用的另一种技术方案为:一种解决WebView加载本地页面时跨域安全性问题的终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0027]S1、在资源加载逻辑中注入加载重定向模块,当JS层接收第一资源加载请求时,所述加载重定向模块拦截所述第一资源加载请求,并根据所述第一资源加载请求所请求加载的资源类型,将所述第一资源加载请求中的资源地址以及与所述资源类型适配的加载方式封装为第二资源加载请求,将所述第二资源加载请求通过消息通道发往App层;
[0028]S2、所述App层接收所述第二资源加载请求,并根据所述第二资源加载请求读取本地资源,并将所述本地资源转换为预设格式的特定数据,App层通过消息通道将所述特定数据返回给JS层;
[0029]S3、JS层接收到所述特定数据后,根据所述特定数据的资源类型执行与所述资源类型适配的实例化方法得到需要加载的资源。
[0030](三)有益效果
[0031]本专利技术的有益效果是:通过将JS层的第一资源加载请求封装成第二资源请求经由消息通道转到App层,App层根据第二资源请求读取本地资源并转换为预设格式的特定数据返回给JS层,JS层实例化该特定数据得到需要加载的资源,无需开启WebView跨域权限,避免产生系统WebView存在的安全漏洞,从而解决WebView加载本地页面时产生的跨域问题。
附图说明
[0032]图1为本专利技术的解决WebView加载本地页面时跨域安全性问题的方法的流程图;
[0033]图2为本专利技术的解决WebView加载本地页面时跨域安全性问题的终端的结构示意图;
[003本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种解决WebView加载本地页面时跨域安全性问题的方法,其特征在于,包括:S1、在资源加载逻辑中注入加载重定向模块,当JS层接收第一资源加载请求时,所述加载重定向模块拦截所述第一资源加载请求,并根据所述第一资源加载请求所请求加载的资源类型,将所述第一资源加载请求中的资源地址以及与所述资源类型适配的加载方式封装为第二资源加载请求,将所述第二资源加载请求通过消息通道发往App层;S2、所述App层接收所述第二资源加载请求,并根据所述第二资源加载请求读取本地资源,并将所述本地资源转换为预设格式的特定数据,App层通过消息通道将所述特定数据返回给JS层;S3、JS层接收到所述特定数据后,根据所述特定数据的资源类型执行与所述资源类型适配的实例化方法得到需要加载的资源。2.根据权利要求1所述的解决WebView加载本地页面时跨域安全性问题的方法,其特征在于,所述S2中所述App层接收所述第二资源加载请求之后还包括:对所述第二资源加载请求进行安全性校验成功后执行后续步骤。3.根据权利要求1所述的解决WebView加载本地页面时跨域安全性问题的方法,其特征在于,S1之后还包括:App层获取CPU和内存的负载信息,动态控制同一时刻内第二资源加载请求并发处理的数量。4.根据权利要求3所述的解决WebView加载本地页面时跨域安全性问题的方法,其特征在于,所述App层获取CPU和内存的负载信息,动态控制同一时刻内第二资源加载请求并发处理的数量包括:所述App层获取CPU和内存的负载信息,当所述同一时刻内第二资源加载请求的数量超过并发处理的预设阈值时,按请求时间排列将超过预设阈值部分的第二资源加载请求放入等待队列中。5.一种解决WebView加载本地页面时跨域安全性问题的终端,包括...

【专利技术属性】
技术研发人员:许建勋唐光宇闫乃永卢学明
申请(专利权)人:宝宝巴士股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1