uni-app 之 web-view 与h5 通讯

news2025/1/22 15:59:25

官网文档:https://uniapp.dcloud.net.cn/component/web-view.html#getenv

web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面(nvue 使用需要手动指定宽高)。

各小程序平台,web-view 加载的 url 需要在后台配置域名白名单,包括内部再次 iframe 内嵌的其他 url 。

属性说明

属性名类型说明平台差异说明
srcStringwebview 指向网页的链接
allowString用于为 iframe 指定其特征策略H5
sandboxString该属性对呈现在 iframe 框架中的内容启用一些额外的限制条件。H5
fullscreenBoolean是否铺满整个页面,默认值:trueH5 (HBuilder X 3.5.4+)
webview-stylesObjectwebview 的样式App-vue
update-titleBoolean是否自动更新当前页面标题。默认值:trueApp-vue (HBuilder X 3.3.8+)
@messageEventHandler网页向应用 postMessage 时,会在特定时机(后退、组件销毁、分享)触发并收到消息。H5 暂不支持(可以直接使用 window.postMessage)
@onPostMessageEventHandler网页向应用实时 postMessageApp-nvue

APP --- vue页面与h5页面通讯

  • src 指的是web-view需要引入的h5页面,vue页面模式下,嵌入的页面会自动铺满屏幕,不需要单独去设置页面宽高
  • 嵌入的h5项目或者页面不是uni-app项目搭建的话,需要在index.html页面或这是当前的HTML页面引入uni-app项目的API ,这样才能使用,才能相互通讯--->APIicon-default.png?t=M85Bhttps://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js
  • app端
        // 引入需要嵌入的h5 链接
        <template>
            <view>
                <web-view @message="message" src="https://uniapp.dcloud.io/static/web-view.html"></web-view>
            </view>
        </template>
        //在methods中接收h5发送的消息
        /**
        * @information message中 接收到的是由h5项目通过uni.postMessage中传递出来的数据,以数组的形式接收每次的消息
        */
        message(event){
            console.log('接收到消息',event.detail.data)
        }
    
  • h5 项目
        //引入uni-app的api之后 ,只需绑定事件,向APP传递消息
        <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
        <script>
            document.addEventListener('UniAppJSBridgeReady', function() {
                uni.postMessage({
                    data: {
                        action: '这是我传送的消息'
                    }
                });//传递的消息信息,必须写在 data 对象中。
            });
        </script>
    

  这个就是vue与h5 的整个通讯流程,BUT!!!,关键来了,注意点来了,就是他不能实时通讯。他只有在页面 后退,组件销毁,分享的时候会触发message事件并接收到消息,说白了就是他并不能实时通讯

解决办法

  1. 将uni-app项目的编译模式更改为V3编译模式,V3编译模式下,网页向应用postMessage为实时消息
  2. 将uni-app项目中的使用web-view的vue页面更改称为nuve页面,此时,消息传递也为实时通讯,详细介绍一下nvue与h5页面通讯

APP --- nvue页面与h5页面通讯

  nuve页面对于web-view来说与vue有点点的不同

  • 样式来说,nuve中的web-view必须指定宽高,它不像vue一样会自动铺满,需要自己自己规定,但是这个宽高不能‘写死’,咱们做的是APP端,屏幕不能是‘死’的,所以先获取手机屏幕信息之后再规定屏幕宽高吧

  • 调试来说,nvue他现在不支持h5 哈,所以通讯这一块吧,你不能在浏览器上面调试,必须真机运行哒

  • 方法来说,为了实时通讯,页面更换为nvue,相对应的方法也要从@message换成@onPostMessage

        <template>
            <view>
                <web-view @onPostMessage="message"
                :style="{width:'200px', height:'200px'}"
                src="https://uniapp.dcloud.io/static/web-view.html"></web-view>
            </view>
        </template>
    

APP 跳转页面

  在h5页面中引入web-view的方法的基础上,不但可以像上面一样进行通讯,还可以在跳转页面,达到从嵌入h5跳回到本地应用的页面上的效果,跳转页面的方式与uni-app一致,在h5页面写入方法就好

  • uni.navigateTo // 跳转到指定页面
  • uni.redirectTo // 关闭当前页面跳转到指定页面
  • uni.reLaunch // 关闭所有页面跳转到指定页面
  • uni.switchTab // 跳转tab页面--只能跳转tab页
  • uni.navigateBack // 返回页面层级

注意

  这里有一个冲突点,当web-view嵌入的h5 是uni-app生成的h5资源的话,这样跳转要怎么跳转呢
  使用uni.webView.navigateTo //其中的webView指的是你嵌入的h5的跳转想要跳转回应用

小程序 --- vue页面与h5页面通讯

  • 小程序的与app一致,引入的h5页面会自动铺满小程序页面。个人类型与海外类型的小程序暂不支持
  • 小程序的src不变
  • 通讯方法由@message更改为@bindmessage 出发时机依旧为小程序后退,组件销毁或者分享触发并接收到消息
  • 引入uni-appAPI之后,再引入微信平台的js文件 --->wxicon-default.png?t=M85Bhttps://res.wx.qq.com/open/js/jweixin-1.3.2.js
  • 发送消息方法更改为 wx.miniProgram.postMessage({ data: 'hhh' })
  • 小程序
        <web-view src="http://a.html?id=123"></web-view>
    
  • h5
        <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
        // javascript
        wx.miniProgram.postMessage({ data: 'hhh' })
        
        //此时接收不到,因为没有触发时机,所以可以进行人为操作
        <script type="text/javascript">
            wx.miniProgram.navigateBack({
                delta: 1
            })
            wx.miniProgram.postMessage({
                data: 'foo'
            })
    </script>
    

APP端web-view扩展

 App端的webview是非常强大的,可以更灵活的控制和拥有更丰富的API。

 每个vue页面,其实都是一个webview,而vue页面里的web-view组件,其实是webview里的一个子webview。这个子webview被append到父webview上。

 通过以下方法,可以获得这个web-view组件对应的js对象,然后参考https://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewObject,可以进一步重设这个web-view组件的样式,比如调整大小

<template>
	<view>
		<web-view src="https://www.baidu.com"></web-view>
	</view>
</template>
<script>
	var wv; //计划创建的webview 
	export default {
		onReady() {
			// #ifdef APP-PLUS 
			var currentWebview = this.$scope.$getAppWebview()
			//此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效,非v3编译模式使用this.$mp.page.$getAppWebview()
			setTimeout(function() {
				wv = currentWebview.children()[0] wv.setStyle({
					top: 150,
					height: 300
				})
			}, 1000);
			//如果是页面初始化调用时,需要延时一下 
			// #endif 
		}
	};
</script>

获取当前环境

  • HTML 在不同的环境下,可能需要执行不同的操作或传递不同的消息。可以通过 uni.getEnv() 方法,来获取当前的环境信息。
        document.addEventListener('UniAppJSBridgeReady', function() {  
            uni.getEnv(function(res) {  
                if (res.plus) {  
                    console.log('当前环境为【5+App】');  
                } else if (res.miniprogram) {  
                    console.log('当前环境为【微信小程序】');  
                }  
            });  
        })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图像下采样再上采样维度不匹配

图像在下采样后再上采样&#xff0c;维度会发生不匹配&#xff0c;假设一幅图像的维度为(b,c,h,w)&#xff0c;那么当h和w是偶数的时候&#xff0c;下采样和上采样是匹配的&#xff0c;当且仅当他是偶数的时候才匹配&#xff0c;然而图像的h和w往往不一定是偶数。当然有许多种方…

【Shell 脚本速成】06、Shell 数组详解

目录 一、数组介绍 二、数组定义 三、数组赋值方式 四、数组取值 案例演示 五、关联数组 5.1 定义管理数组 5.2 关联数组赋值 5.3 管理数组取值 5.4 综合案例 有这样一个现实问题&#xff1a;一个班级学员信息系统&#xff0c;要求存储学员ID、NAME、SCORE、AGE、GE…

关于订单功能的处理和分析

这两天看了一下RABC的权限管理处理&#xff0c;梳理了一下订单功能的表创建&#xff0c;界面&#xff0c;功能分析。 目录 RABC RBAC0模型 那么对于RABC模型我们怎么创建数据库表&#xff1f; 订单模块的梳理 RABC RABC说的是在用户和权限之间多一个角色&#xff0c;用户与…

软件测试基础

⭐️前言⭐️ &#x1f349;博客主页&#xff1a; &#x1f341;【如风暖阳】&#x1f341; &#x1f349;精品Java专栏【JavaSE】、【备战蓝桥】、【JavaEE初阶】、【MySQL】、【数据结构】 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&…

Spring Cloud OpenFeign - - - >拦截器

源码地址&#xff1a;https://download.csdn.net/download/weixin_42950079/87209379 SpringMVC拦截器 和 OpenFeign拦截器 的区别 初学者很容易将 Spring MVC 拦截器 和 Spring Cloud OpenFeign 拦截器搞混&#xff0c;误以为OpenFeign拦截器就是SpringMVC拦截器&#xff1a; …

虹科分享 | 麦氏比浊仪在药敏试验中的应用

细菌是重要的病原微生物&#xff0c;人类针对不同的病原菌研发了各类抗菌药&#xff0c;这些药物对细菌性疾病的治疗与控制起到了关键作用。然而随着新型致病菌的不断出现&#xff0c;加上细菌在药物使用过程中逐渐产生了耐药性&#xff0c;抗菌药的防治效果越来越差。病原菌对…

Python 中的类与继承

类的定义以及实例的建立 Python中&#xff0c;类通过 class 关键字定义。 例如最简单的一个类定义可以为&#xff1a; class Person(object):pass Python 的编程习惯&#xff0c;类名以大写字母开头&#xff0c;紧接着是(object)&#xff0c;表示该类是从哪个类继承下来的。…

解决单文件组件里的跨域请求数据问题(使用vue单文件组件请求数据必会遇到的问题!!!)

为什么要解决跨域问题&#xff1a; 因为浏览器有限制&#xff0c;只有同域名同端口号下的数据才能拿来用&#xff1b;那如果想拿到不同域名不同端口号下的数据就不行了&#xff1b; 在单文件组件中如何去解决跨域问题&#xff1a; 因为服务器没有跨域限制&#xff0c;只有浏览…

PyTorch(四)Torchvision 与 Transforms

文章目录Log一、Torchvision1. CIFAR10① 介绍② 使用2. 与 Transforms 结合使用总结Log 2022.11.28接着开启新的一章2022.11.29继续学习 一、Torchvision 视频教程中 Torchvision v0.9.0文档Torchvision 官方文档Torchvision Datasets API 文档 1. CIFAR10 ① 介绍 CIFAR…

HBuilder X实现banner轮播图

第一步还是去仔细阅读官方文档&#xff0c;找到组件下面的内置组件里面的swiper&#xff0c;如图所示 官方是提供了一个用来制作轮播图的滑块视图容器&#xff1a;swiper 一般来说&#xff0c;轮播图的图片地址是由后端返回给前端遍历显示在页面上的&#xff0c;所以基本的结构…

世界杯的“中国元素”昂扬大国担当,点面科技全新推出的多模态多功能移动终端踏上卡塔尔征途!

本次世界杯中国足球队没有参加&#xff0c;但是在世界杯的赛场上到处都有中国元素。 中国承建的卢赛尔体育场 卡塔尔世界杯主体育场——卢赛尔球场由中国铁建以总承包身份承建&#xff0c;引发了全球瞩目。在本届世界杯赛事中&#xff0c;该场馆将承担包括决赛在内的10场比赛&…

idea手动创建webapp(在main文件夹下)

SSM自学笔记 文章目录一、Maven使用正常情况首先不使用骨架创建好Maven项目然后选择Project Structure...选择要创建webapp的模块修改路径二、Maven不正常工作时一、Maven使用正常情况 首先不使用骨架创建好Maven项目 然后选择Project Structure… 选择要创建webapp的模块 选好…

前置微小信号放大器在光声技术的血管识别研究中的应用

实验名称&#xff1a;前置微小信号放大器在光声技术的血管识别研究中的应用 研究方向&#xff1a;生物识别技术 测试目的&#xff1a; 利用MATLAB对光声血管进行识别&#xff1a;1、对光声血管图库的图像进行预处理包括归一化、二值化、平滑、细化和毛刺修剪得到细化图像&#…

0109 蓝桥杯真题12

/* * 观察下面的现象,某个数字的立方&#xff0c;按位累加仍然等于自身。 * 1^3 1 * 8^3 512 5128 * 17^3 4913 491317 ... *请你计算包括1,8,17在内&#xff0c;符合这个性质的正整数一共有多少个&#xff1f; *填写该数字&#xff0c;不要填写任何多余的内…

【DevPress】V2.4.3版本发布,增加内容收录管理

DevPress V2.4.3版本于2022年11月10日发版&#xff0c;增加内容收录模块&#xff0c;方便用户内容收录。 一、该版本功能包含 1、新需求 1&#xff09;控制台增加内容收录管理模块&#xff0c;包括收录内容额度管理、自动收录功能、基于内容搜索做收录以及收录内容列表。 - …

凯利公式 - Kelly formula

欢迎关注沉睡者IT&#xff0c;点上面关注我 ↑ ↑ 凯利公式的概述 凯利公式是一条可应用在投资资金和赌注的公式。应用于多次的随机赌博游戏&#xff0c;资金的期望增长率最高&#xff0c;且永远不会导致完全损失所有资金的后果。它假设赌博可无限次进行&#xff0c;而且没有下…

Netty进阶——粘包与半包(滑动窗口)

TCP 以一个段&#xff08;segment&#xff09;为单位&#xff0c;每发送一个段就需要进行一次确认应答&#xff08;ack&#xff09;处理&#xff0c;但如果这么做&#xff0c;缺点是包的往返时间越长性能就越差。 为了解决此问题&#xff0c;引入了窗口概念&#xff0c;窗口大小…

微慕积分商城插件

微信小程序专业版在第一个正式版发布的时候&#xff0c;就推出了积分系统。用户登录小程序、签到、发表文章、评论文章、发表话题、回复话题、点赞、赞赏、付费阅读后都可以获得相应的积分。但这个积分攒了足够多后&#xff0c;有什么用呢&#xff1f;可以用于积分阅读文章&…

论文代码测试

一、代码所属论文 1. Document Image Enhancement with GANs - TPAMI journal 代码中的介绍提供了处理四种情况的模型&#xff0c;这四种模型功能分别为 &#xff1a; 1&#xff09;二值化图片文字; 2&#xff09;清晰化图片中模糊文字; 3&#xff09;去除图片水印; 4&…

FPGA----ZCU106基于axi-hp通道的pl与ps数据交互(全网唯一最详)

1、大家好&#xff0c;今天给大家带来的内容是&#xff0c;基于AXI4协议的采用AXI-HP通道完成PL侧数据发送至PS侧&#xff08;PS侧数据发送至PL侧并没有实现&#xff0c;但是保留了PL读取PS测数据的接口&#xff09; 2、如果大家用到SoC这种高级功能&#xff0c;那大家应该对于…