随笔集:uniapp内嵌webview域名拦截

文章详细介绍了在uniapp中如何创建webview并实现特定域名的拦截功能。在onLoad函数中,从页面参数获取url,然后通过plus.webview创建并加载webview。在setupWebView方法中,使用overrideUrlLoading进行URL拦截,并在拦截成功后执行特定回调,例如导航回上一页。
摘要由CSDN通过智能技术生成

uniapp内嵌webview域名拦截

新建webview的页面 web.vue 内容如下

<template>
	<view class="view"></view>
</template>


<script>
	export default {
		name: 'web',
		data() {
			return {
				url:'',
				kWebview: null,
			} 
		},
		onLoad(option) {
			var pages = getCurrentPages() // 获取栈实例
			let currentRoute = pages[pages.length - 1].route; // 获取当前页面路由
			let currentPage = pages[pages.length - 1]['$page']['fullPath'] //当前页面路径(带参数)
			let url = currentPage.split('jumpUrl=')[1]
			this.url = decodeURIComponent(url)
			if (this.url) {
				this.setupWebView()
			} else {
				uni.showToast({
					title: '地址获取失败,请重新进入页面',
					icon: 'none',
					duration: 1500,
				})
				setTimeout(()=>{
					uni.navigateBack()
				}, 1500)
			}
		},
		onBackPress(e) {
			if (e.from === 'navigateBack') {
				return false
			}
			// #ifdef APP-PLUS
			var currentWebview = this.$scope.$getAppWebview();
			currentWebview.children()[0].canBack(e => {
				const canBack = e.canBack
				if (canBack) {
					this.kWebview.back();
				} else {
					uni.navigateBack();
				}
			})
			// #endif
			return true
		},
		onNavigationBarButtonTap(e) {
			uni.navigateBack();
		},
		methods: {
			setupWebView() {
				let that = this
				if(this.kWebview){return;}
				// var w=plus.nativeUI.showWaiting()
				this.kWebview = plus.webview.create("", "custom-webview", {
					plusrequire: "none",
					'uni-app': 'none',
					top: uni.getSystemInfoSync().statusBarHeight + 44, // 适配底部高度
					bottom: '0px',
				})
				that.kWebview.loadURL(that.url)
				var currentWebview = that.$scope.$getAppWebview();
				setTimeout(()=>{
					currentWebview.append(that.kWebview)
					const child = currentWebview.children()[0]
					// match 正则,阻止匹配的地址,不传match 则全部阻止
					let match = ''
					// 拦截域名的正则 *表示该域名下的所有地址都包括
					match = '(alipays://|https://xxx.xxxxx.xx).*'
					// reject 表示拦截
					that.kWebview.overrideUrlLoading({mode:"reject",match: match},(event)=>{
						// 拦截成功的回调
						let reg = RegExp(/APPLICATIONDETAILS/);
						let content = event.url.split('?')[1]
						let pages = getCurrentPages()
						let prevPage = pages[pages.length - 2] //上一页
						// 调用上一页方法 并返回上一页
						if(event.url.match(reg)) {
							prevPage.$vm.fun()
							uni.navigateBack({
								delta: 1
							})
						}
					})
				},200)
				that.kWebview.onloaded({
					
				})
			}
		}
	}
</script>

<style lang="scss" scoped>
.view{
	width: 100vw;
	height: 100vh;
}
</style>

进入页面的代码如下

// 需要内嵌的页面地址
let url = encodeURIComponent('https://blog.csdn.net')
uni.navigateTo({
	url: `/pages/web/web?jumpUrl=${url}`
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值