前言

最近在项目中遇到一个需求,就是通过uni-app的webview嵌入H5页面,并且点击对应的按钮,跳回uni-app中的下单页面,但是在H5页面本身就能进行其他页面的跳转,所以需要阻止H5页面内的跳转(也就是H5自身的跳链操作)


uni-app#webview文档地址:https://uniapp.dcloud.net.cn/component/web-view.html#web-view

具体实现 (IOS、Android均有效)

  • 获取当前webview页面
		//方法一
		const currentWebview = this.$mp.page.$getAppWebview(); 
		//方法二
		var pages = getCurrentPages();  
		var page = pages[pages.length - 1]; 
		var currentWebview = page.$getAppWebview(); 
  • 拦截H5页内的跳转请求
	var wv = currentWebview.children()[0];
	// 拦截所有页面的跳转,可使用参数拦截  .jd.com
	wv.overrideUrlLoading({
	// “reject"  表示满足match属性定义的提交时拦截url跳转并触发callback回调,不满足match属性定义的条件时不拦截url继续加载。
    // “allow”  表示满足match属性定义的条件时不拦截url继续加载,不满足match属性定义的条件时拦截url跳转并触发callback回调;
		mode: 'allow',
		match: '.*jd\.com/.*'
	}, function(e) {
		try {
			// 根据自己的业务需求,处理链接上的参数,进行跳转
			var navURL =`/pages/index/order/order?id=${xxx}`;
			uni.navigateTo({
				url: navURL,
				animationType: 'pop-in'
			})
		} catch (e) {
			console.log(e)
			//TODO handle the exception
		}
		console.log('reject Url', url);
	})
  • 完整代码
	onReady() {
			var that = this;
			console.log('==========onReady  Start========')
			// #ifdef APP-PLUS
			var pages = getCurrentPages();
			var page = pages[pages.length - 1];
			var currentWebview = page.$getAppWebview();
			var url = currentWebview.children()[0].getURL();
			console.log("===URL===", url);

			var wv = currentWebview.children()[0];
			// 拦截所有页面的跳转,可使用参数拦截  .jd.com
			wv.overrideUrlLoading({
				mode: 'allow',
				match: '.*jd\.com/.*'
			}, function(e) {
				try {
					// 根据自己的业务需求,处理链接上的参数,进行跳转
					var navURL =`/pages/index/order/order?id=${xxx}`;
					uni.navigateTo({
						url: navURL,
						animationType: 'pop-in'
					})
				} catch (e) {
					console.log(e)
					//TODO handle the exception
				}
				console.log('reject Url', url);
			})
			// #endif
			console.log('==========onReady  End========')
		},

以上根据自身业务需求进行,可以完成H5页内webview请求拦截。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐