uniapp使用webView工作实践记录

 更新时间:2024年06月12日 09:47:34   作者:我们仰望同一片星空  
uni-app中的web-view是一个web浏览器组件,可以用来承载网页的容器,下面这篇文章主要给大家介绍了关于uniapp使用webView的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、建立APP页面和webview的通讯

1.引入webview.js

App 端使用 uni.web-view.js 的最低版为 uni.webview.1.5.4.js

APP端可以支持网络网页和本地网页,但如果使用本地网页和相关资源(js、css等文件)必须放在 static 目录下。 

2.引入搭桥document.addEventListener('UniAppJSBridgeReady',function(){})

在app端是识别不到document元素的,所以为了适配app,需要将搭桥的方法单独建立一个js文件放到 static 目录下

document.addEventListener('UniAppJSBridgeReady', function () {
	console.log('我建立起了通讯');
	uni.postMessage({
		data: {
			successFlag: true,
		}
	});
})

3.发送消息

首先<web-view>中需要添加message的监听,当网页向应用 postMessage 时,会在特定时机(后退、组件销毁、分享)触发并收到消息。

<web-view ref="webview" :src="webViewUrl" @message="onPostMessage"></web-view>

其次网页向应用 postMessage 需要通过 wv.evalJS(``)方法,在此方法中利用uniapp的postMessage()方法向应用发送消息

wv.evalJS(`uni.postMessage({
					data: {
					  base64: canvas.toDataURL("image/png"),
					}
				});	`)

最后在uniapp通过 onPostMessage 函数中获取网页信息

onPostMessage: function (e) {
				console.log(e.detail.data[0])
			},

 二、webview初始化遇坑

1.setJsFile() 和 appendJsFile() 方法的区别

在初始化webview时,需要引入webview.js文件和添加的搭桥 js (post.js)文件 

此时需注意 setJsFile() 和 appendJsFile() 方法的区别:

setJsFile:设置新的JS文件后将清空之前设置的值。也就是后台如果一直 setJsFile,那么只有最后一个js文件生效。

appendJsFile:添加多个js文件将按照添加的先后顺序执行。

2. 文件路径

setJsFile() 和 appendJsFile()方法中所写的文件路径一定要正确

如果文件路径从static目录开始写,比如这样:

wv.setJsFile("static/uni.webview.1.5.5.js")
wv.appendJsFile("static/post.js")

这样写在安卓端没有问题,运行很顺利,但是在 IOS 端就会发现这两个方法所加文件并未生效,所以文件路径一定要写正确,默认带上'_www'

wv.setJsFile("_www/static/uni.webview.1.5.5.js")
wv.appendJsFile("_www/static/post.js")

3. setJsFile() 和 appendJsFile()方法所写时机

在渲染时写 setJsFile() 和 appendJsFile()方法,在安卓端不会有任何问题,但在IOS端会发现这两个方法并未生效

因此建议在 IOS 端  setJsFile() 和 appendJsFile() 操作应放在监听 loaded 事件之后

            var currentWebview = this.$scope.$getAppWebview() //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效
			this.wv = currentWebview.children()[0]

			this.wv.addEventListener("loaded", () => {
			    this.wv.setJsFile("_www/static/uni.webview.1.5.5.js")
			    this.wv.appendJsFile("_www/static/post.js")
			    console.log('加载完成');
			    this.getImg() // 加载完成后获取一次验证码图片,但可能获取为空
			}, false);
			

4.setStyle()设置样式只能在APP端生效

只有app可以设置webview的宽高,其他的端是无解的

利用节点信息减去其他内容的高度,得到webview的高度,this.scope.scope.scope.getAppWebview()获取webview实例(只能app使用),再修改实例setStyle设置。

5.层级问题(事件不触发)

在uniapp使用webview时,需要注意样式层级问题,如下代码,若在当前页面使用了webview,则点击时不会触发点击事件,原因就是webview显示层级高于当前页面

解决:添加样式层级:z-index: 999;

        <view class="privacy">
				<view @click="toPrivacy('user')"><u--text text="机电用户协议" size="12"></u--text></view>、
				<view @click="toPrivacy('privacy')"><u--text text="隐私协议" size="12"></u--text></view>
		</view>

附:uniapp使用webview不占全屏

在uniapp中使用webview时,如果不希望webview占据全屏,可以通过以下方式进行设置。

  • 在uniapp的页面中,可以使用flex布局来控制webview所占的比例。设置一个容器div,并给其设置宽度、高度及display属性为flex。然后将webview放置在这个容器中,可以通过设置容器的flex属性来控制webview的占比。

  • 另一种方式是使用css样式来控制webview的宽高以及位置。在uniapp页面的style标签中,可以给webview设置具体的宽度、高度以及margin、padding属性来调整其位置和大小。

通过以上两种方式,可以调整webview的尺寸,使其不占满整个屏幕。可以根据实际需要,灵活运用这些方法,来适配不同的页面布局需求。

需要注意的是,uniapp中的webview组件在不同平台上的表现可能会有所不同,因此还需要根据目标平台进行适当的调整。

总结 

到此这篇关于uniapp使用webView的文章就介绍到这了,更多相关uniapp使用webView内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue3中Vant的使用及说明

    vue3中Vant的使用及说明

    这篇文章主要介绍了vue3中Vant的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Vue中的el-date-picker时间选择器的使用实例详解

    Vue中的el-date-picker时间选择器的使用实例详解

    el-date-picker是Element UI框架中提供的日期选择器组件,它支持单个日期、日期范围、时间、日期时间等多种选择方式,本文给大家介绍Vue中的el-date-picker时间选择器的使用,感兴趣的朋友一起看看吧
    2023-10-10
  • VUE的tab页面切换的四种方法

    VUE的tab页面切换的四种方法

    这篇文章主要介绍了VUE的tab页面切换的四种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • vite环境变量配置小结

    vite环境变量配置小结

    Vite环境变量配置是Vite开发环境下重要的一环,它能够根据不同的环境变量对项目进行不同的配置,使得项目更加灵活和可维护,本文就来介绍一下vite环境变量配置小结,感兴趣的可以了解一下
    2023-11-11
  • Vue结合后台导入导出Excel问题详解

    Vue结合后台导入导出Excel问题详解

    这篇文章主要介绍了Vue结合后台导入导出Excel问题详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Vue3的setup在el-tab中动态加载组件的方法

    Vue3的setup在el-tab中动态加载组件的方法

    公司某项目需求在页面显示的组件是根据角色变化而变化的,怎么实现这个效果呢,下面小编给大家介绍下Vue3的setup在el-tab中动态加载组件的方法,需要的朋友可以参考下
    2022-11-11
  • Vue3中Vite和Vue-cli的特点与区别详解

    Vue3中Vite和Vue-cli的特点与区别详解

    vue-cli是Vue早期推出的一款脚手架,使用webpack创建Vue项目,可以选择安装需要的各种插件,比如Vuex、VueRouter,下面这篇文章主要给大家介绍了关于Vue3中Vite和Vue-cli的特点与区别的相关资料,需要的朋友可以参考下
    2022-12-12
  • vue 解决addRoutes多次添加路由重复的操作

    vue 解决addRoutes多次添加路由重复的操作

    这篇文章主要介绍了vue 解决addRoutes多次添加路由重复的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Vue路由切换时的左滑和右滑效果示例

    Vue路由切换时的左滑和右滑效果示例

    这篇文章主要介绍了Vue路由切换时的左滑和右滑效果,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • vue的生命周期钩子与父子组件的生命周期详解

    vue的生命周期钩子与父子组件的生命周期详解

    Vue的生命周期就是vue实例从创建到销毁的全过程,也就是new Vue() 开始就是vue生命周期的开始。Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等⼀系列过程,称这是Vue的⽣命周期
    2022-08-08

最新评论