uniapp web-view页面层级过高,想在web-view上层再加入按钮,采用plus.nativeObj.View实现。动态创建web-view解决切换src后丢失背景问题。

这篇具有很好参考价值的文章主要介绍了uniapp web-view页面层级过高,想在web-view上层再加入按钮,采用plus.nativeObj.View实现。动态创建web-view解决切换src后丢失背景问题。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:有两个web-view页面,需要添加按钮,动态切换web-view的src进行页面切换

问题:uniapp的web-view层级很高,通过positon的z-index无法将其他元素置于web-view页面上层

解决方式:采用底层组件plus.nativeObj.View创建视图,该视图比web-view层级高,可在web-view上层添加按钮,图片,矩形区域,文本,富文本,输入框

plus.nativeObj.View使用文档:https://www.html5plus.org/doc/zh_cn/nativeobj.html#plus.nativeObj.View

web-view组件

 		<web-view class='view' :src="link"></web-view>

直接通过web-view组件,进行src切换,会存在一些问题。
1、如果链接的web-view页面比较复杂,逻辑渲染比较多,或者网速慢的话,会导致切换后的页面背景丢失,变成白色。
2、安卓设备的硬件水平更不上也会出现背景丢失的问题。

经过实验,采用动态创建web-view的形式,可以解决问题1。

动态创建web-view

		this.webViewObj = plus.webview.create("", "webview", {
 					plusrequire: "none", //禁止远程网页使用plus的API,有些使用mui制作的网页可能会监听plus.key,造成关闭页面混乱,可以通过这种方式禁止
 					//'uni-app': 'none', //不加载uni-app渲染层框架,避免样式冲突
 					// top:uni.getSystemInfoSync().statusBarHeight+93 //放置在titleNView下方。如果还想在webview上方加个地址栏的什么的,可以继续降低TOP值
 					top: uni.getSystemInfoSync() //放置在titleNView下方。如果还想在webview上方加个地址栏的什么的,可以继续降低TOP值
 				})
 				this.webViewObj.loadURL(url)//链接地址
 				this.webViewObj.addEventListener('loading', () => {
 					uni.showLoading({
 						title: '加载中',
 						mask: true
 					});
 				}, false);
 				this.webViewObj.addEventListener('loaded', () => {
 					uni.hideLoading();
 				}, false);
 				var currentWebview = this.$scope.$getAppWebview(); //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效,非v3编译模式使用this.$mp.page.$getAppWebview()
 				currentWebview.append(this.webViewObj); //一定要append到当前的页面里!!!才能跟随当前页面一起做动画,一起关闭

创建按钮
采用plus.nativeObj.View创建按钮,我是直接用的按钮图片,然后绑定点击事件,在点击事件中,关闭上一个web-view,创建一个新的web-view

			let robotView = new plus.nativeObj.View('robot-btn', {
 						bottom: '0px',
 						left: '39%',
 						height: '44px',
 						width: '100px'
 					},
 					[{
 							tag: 'img',
 							id: 'robot',
 							src: '/static/robot.png',
 							position: {
 								top: '0px',
 								left: '0px',
 								width: '68px',
 								height: '28px'
 							}
 						},

 					]);
 				robotView.show();
 				robotView.addEventListener("click", (e) => {
 					this.link = this.robot
 					this.webViewObj.close()
 					this.createView(this.robot)
 				}, false);

完整代码

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

 <script>
 	export default {
 		data() {
 			return {
 				link: 'http://192.168.7.61:8848/',
 				robot: 'http://192.168.7.61:8848/',
 				monitor: 'http://192.168.7.61:8845',
 				webViewObj: ''
 			}
 		},
 		onLoad() {},
 		created() {
 			this.createView(this.robot)
 			this.createBtn()
 		},
 		methods: {
 		//动态创建web-view,传入url地址
 			createView(url) {
 				this.webViewObj = plus.webview.create("", "webview", {
 					plusrequire: "none", //禁止远程网页使用plus的API,有些使用mui制作的网页可能会监听plus.key,造成关闭页面混乱,可以通过这种方式禁止
 					//'uni-app': 'none', //不加载uni-app渲染层框架,避免样式冲突
 					// top:uni.getSystemInfoSync().statusBarHeight+93 //放置在titleNView下方。如果还想在webview上方加个地址栏的什么的,可以继续降低TOP值
 					top: uni.getSystemInfoSync() //放置在titleNView下方。如果还想在webview上方加个地址栏的什么的,可以继续降低TOP值
 				})
 				this.webViewObj.loadURL(url)
 				this.webViewObj.addEventListener('loading', () => {
 					uni.showLoading({
 						title: '加载中',
 						mask: true
 					});
 				}, false);
 				this.webViewObj.addEventListener('loaded', () => {
 					uni.hideLoading();
 				}, false);
 				var currentWebview = this.$scope.$getAppWebview(); //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效,非v3编译模式使用this.$mp.page.$getAppWebview()
 				currentWebview.append(this.webViewObj); //一定要append到当前的页面里!!!才能跟随当前页面一起做动画,一起关闭
 			},
 			createBtn() {
 			//创建按钮1
 				let robotView = new plus.nativeObj.View('robot-btn', {
 						bottom: '0px',
 						left: '39%',
 						height: '44px',
 						width: '100px'
 					},
 					[{
 							tag: 'img',
 							id: 'robot',
 							src: '/static/robot.png',
 							position: {
 								top: '0px',
 								left: '0px',
 								width: '68px',
 								height: '28px'
 							}
 						},

 					]);
 				//显示按钮1
 				robotView.show();
				//按钮1添加点击事件
 				robotView.addEventListener("click", (e) => {
 					this.link = this.robot
 					this.webViewObj.close()
 					this.createView(this.robot)
 				}, false);

				//创建按钮2
 				let monitorView = new plus.nativeObj.View('monitor-btn', {
 						bottom: '0px',
 						left: '54%',
 						height: '44px',
 						width: '100px'
 					},
 					[{
 						tag: 'img',
 						id: 'monitor',
 						src: '/static/monitor.png',
 						position: {
 							top: '0px',
 							left: '0px',
 							width: '68px',
 							height: '28px'
 						}
 					}, ]);
 			    //按钮2显示
 				monitorView.show();
 				//按钮2添加点击事件
 				monitorView.addEventListener("click", (e) => {
 					this.link = this.monitor
 					this.webViewObj.close()
 					this.createView(this.monitor)
 				}, false);
 			}
 		}
 	}
 </script>

 <style>
 	.content {
 		position: relative;
 	}
 </style>

预览图
红框部分就是使用plus.nativeObj.View创建的图片按钮
uniapp web-view页面层级过高,想在web-view上层再加入按钮,采用plus.nativeObj.View实现。动态创建web-view解决切换src后丢失背景问题。文章来源地址https://www.toymoban.com/news/detail-514374.html

到了这里,关于uniapp web-view页面层级过高,想在web-view上层再加入按钮,采用plus.nativeObj.View实现。动态创建web-view解决切换src后丢失背景问题。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp小程序使用web-view承载的html页面是uniapp H5时,H5与小程序通讯

    最近在小程序项目用到web-view,需要web-view承载的H5和小程序通讯,碰到个大坑,所以写一下实现过程及怎么避坑。 一、小程序向web-view承载的H5传递参数,直接在url后接参数即可(xxxxx.com) 二、H5向小程序发送消息 在uniapp项目根目录创建 模板html 2、然后在模板html里引入微信

    2024年02月13日
    浏览(48)
  • uniapp系列-超详细教你在uni-app+vue3里通过web-view组件传递信息打开H5页面写入localstorage并解决兼容性

    web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面(nvue 使用需要手动指定宽高)。 点击这里直达官网文档 点击这里下载我的代码demo 本文最下面还有一些 常见或者奇怪问题解决方案 哦~ 之前开发好的H5页面,不想重新开发,想要直接放进项目用

    2024年02月09日
    浏览(55)
  • uniapp的小程序中使用web-view进行相互传参,并监听web-view的返回键

    H5页面中 1.引入微信js https://res.wx.qq.com/open/js/jweixin-1.4.0.js 2.引入 uniapp 的jdk文件(去官网下到本地)( 引入一定要放到body下面,不然UniAppJSBridgeReady不生效 ) 3.写好UniAppJSBridgeReady vue页面中接收值 在vue的h5页面中 在uniapp页面中通过@message拿值 原因:官方说小程序使用web-view是

    2024年02月08日
    浏览(51)
  • 小程序之web-view中的页面分享

    由于整个小程序都是用web-view嵌入的,这个时候,如果单纯的进行页面分享,只会导致不管在web-view的哪个页面进行分享,都会在点击后进入首页。 首先是开启小程序的页面分享功能 然后在onShareAppMessage中包装一下分享的信息,该回调是在点击右上角的分享之后,但是信息还

    2024年02月04日
    浏览(39)
  • 小程序通过<web-view>跳转H5页面

     小程序通过web-view跳转H5页面 vue项目  小程序项目 在小程序app.json文件,配置vue跳小程序页面的路径   \\\"pages\\\":[     \\\"pages/wxpay/wxpay\\\"   ],

    2024年02月08日
    浏览(47)
  • 钉钉小程序 打开web-view页面显示白屏

     注意: 先检查是否配置HTTP 安全域名和 Webview 安全域名 !!一定要配置 配置后,我真机调试时ios手机仍然无法打开。 原因:发现url中存在中文字符 解决办法:使用encodeURIComponent, encodeURIComponent()  函数通过将特定字符的每个实例替换成代表字符的 UTF-8 编码的一个、两个

    2024年02月02日
    浏览(84)
  • 微信小程序在web-view页面增加一个按钮

    需求: 在微信小程序中通过web-view打开H5页面,需要小程序端在页面中增加一个可以请求接口的按钮 实现方法 通过在web-view中嵌套cover-view标签来实现( 注意: cover-view只支持嵌套 cover-view、cover-image,可在 cover-view 中使用 button,但是本人在里面使用button标签时,对button添加样式无效

    2024年02月07日
    浏览(71)
  • uniapp web-view与 H5、微信小程序传参

    2.将文件放置到pc端的配置文件夹中/utils/uni.webview.1.5.4.js’ 3.在需要使用的页面中引入 import * as uni from ‘@/utils/uni.webview.1.5.4.js’ 4.进行初始化 mounted() { document.addEventListener(‘UniAppJSBridgeReady’, function() { // 初始化 操作 uni.webView.postMessage({ data: { order: ‘playRecord’ } }); }); }, npm

    2024年02月14日
    浏览(35)
  • uni-app和web-view页面相互传参

    首先:这里说的是uni-app开发的APP项目,嵌入web-view页面,并进行相互传参,如果和您想了解的内容相符,请继续阅读。 一、说到web-view嵌入uni-app开发的APP,传参方面很多人首先会想到url传参。 这种方法是app向webview传参最简单的方式,但也存在许多弊端: 1.参数会被抓取,如

    2024年02月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包