拦截Webview窗口的URL请求

void wobj.overrideUrlLoading(options, callback);

说明:

拦截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”
    表示满足match属性定义的条件时不拦截url继续加载,不满足match属性定义的条件时拦截url跳转并触发callback回调; “reject"表示满足match属性定义的提交时拦截url跳转并触发callback回调,不满足match属性定义的条件时不拦截url继续加载。
    默认值为"reject”。
  • 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 (支持)

例子:

<template>
	<view></view>
</template>
<script>
var wv//计划创建的webview
export default {
	onLoad(option) {
		// #ifdef APP-PLUS
		wv = plus.webview.create("","custom-webview",{
			plusrequire:"none", //禁止远程网页使用plus的API,有些使用mui制作的网页可能会监听plus.key,造成关闭页面混乱,可以通过这种方式禁止
      		'uni-app': 'none', //不加载uni-app渲染层框架,避免样式冲突
			top:uni.getSystemInfoSync().statusBarHeight//放置在titleNView下方。如果还想在webview上方加个地址栏的什么的,可以继续降低TOP值
		})
		wv.loadURL(option.url)
		wv.overrideUrlLoading({mode:"reject"}, (e) => {
			console.log(e.url)
		})
		var currentWebview = this.$scope.$getAppWebview(); //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效
		currentWebview.append(wv);//一定要append到当前的页面里!!!才能跟随当前页面一起做动画,一起关闭
		// #endif
	}
}
</script>