跨平台应用开发进阶 (五十七):uni-app 通过 overrideUrlLoading 实现拦截 webview 窗口的 URL 跳转请求
一、前言
项目需求:通过uni-app
的webview
嵌入 H5 页面,且webview
的src
为互联网页面访问地址,页面中涉及很多可点击链接,若不加限制,则可以在webview
中随意跳转至其它外链地址,存在安全合规隐患。
可通过overrideUrlLoading
实现拦截Webview
窗口的 URL 请求。
二、overrideUrlLoading
语法如下:
说明:
拦截
URL
请求后,Webview
窗口将不会跳转到新的URL
地址,此时将通过callback
回调方法返回拦截的URL
地址(可新开Webview
窗口加载URL
页面等)。此方法只能拦截窗口的网络超链接跳转(包括调用
loadURL
方法触发的跳转),不可拦截页面请求资源请求(如加载css/js/png
等资源的请求)。多次调用
overrideUrlLoading
时仅以最后一次调用设置的参数值生效。
参数:
options
: (WebviewOverrideUrlOptions
) 可选 拦截 URL 请求的参数。effect
:(String 类型 ) 拦截URL
请求生效时机。可取值:“
instant
” -表示立即生效,即调用overrideUrlLoading
方法后立即生效;“
touchstart
” -表示用户操作Webview
窗口(触发touchstart
事件)后生效,如果用户没有操作Webview
窗口则不对 URL 请求操作进行拦截处理。
默认值为"instant"。
mode
: (String 类型 ) 拦截模式。可取值: “allow
”、"reject
”,默认值为"reject
”。“
allow
”表示满足match
属性定义的条件时不拦截 url 继续加载,不满足match
属性定义的条件时拦截url
跳转并触发callback
回调;“
reject
"表示满足match
属性定义的提交时拦截url
跳转并触发callback
回调,不满足match
属性定义的条件时不拦截url
继续加载。match
: (String 类型 ) 区配是否需要处理的URL
请求。支持正则表达式,默认值为对所有URL
地址生效(相当于正则表达式“.*”)。如果mode
值为"allow
"则允许区配的URL
请求跳转,mode
值为"reject
"则拦截区配的URL
请求。exclude
: (String 类型 ) 排除拦截处理请求类型。不拦截处理指定类型的URL
请求,直接使用系统默认处理逻辑。 可取值:"
none
"表示不排除任何URL
请求(即拦截处理所有URL
请求);“
redirect
"表示排除拦截处理301/302
跳转的请求(谨慎使用,非a
标签的href
触发的URL
请求可能会误判断为302
跳转)。 默认值为"none
”。callback
: ( OverrideUrlLoadingCallback ) 可选 拦截URL
请求的回调函数。
参数:event
: ( Event ) 必选 Webview
窗口拦截URL
跳转事件数据;可通过event
的url
属性获取拦截的URL
地址。
返回值:void
: 无
平台支持:
Android
- ALL (支持) :5+APP
需要选择“解压资源后运行”模式后才能截获应用资源的 URL 请求。iOS
- ALL (支持)
二、码上解决
以上根据自身业务需求进行,可以完成 H5 页内webview
请求拦截。
三、拓展阅读
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/863440c95dea889f832699c03】。文章转载请联系作者。
评论