uniapp中运用web-view组件的经验

在 uniapp 开发中,有时候需要在vue页面中嵌入一个webview组件,用来加载一些本地或远程的网页。但是,如何在vue页面和webview之间实现数据的传递和通信呢?常用的方法是使用uniapp官方提供的组件webview ,使用uni-app提供的 UniAppJSBridgeReady 事件和postMessage方法,来实现 vue 页面和 webview 之间的双向数据交换。

在 web-view加载页面中,会涉及wx、plus、uni等对象的使用。

  • 在小程序下使用wx的api,需要引入微信提供的https://res.wx.qq.com/open/js/jweixin-1.4.0.js。
  • 在app下默认有plus对象,不需要引入js文件。
  • 不管是在小程序下还是在app下,使用uni的api,需要引入https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.0.1.52.js

在 web-view 加载页面中,会涉及wx、plus、uni等对象的使用 ,话不多说上代码!!!

监听 web-view 组件的 message 事件,然后在事件回调的 event.detail.data 中接收传递过来的消息 。

 从 HTML 向应用发送消息 !!!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
</head>
<body>
    <!-- 微信 JS-SDK 如果不需要兼容小程序,则无需引用此 JS 文件。 -->  
    <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>  
    <!-- uni 的 SDK,必须引用。 -->  
    <script type="text/javascript" src="//js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.0.1.52.js"></script>
    <script type="text/javascript">
	var path = '/pages/index/index'
	var code = 'nanaaijunjun09141125'
            // UniAppJSBridgeReady事件会在uni.webview.js相关代码加载完成后触发。
			document.addEventListener('UniAppJSBridgeReady', function() {
            alert('正在监听 UniAppJSBridgeReady ....')
				if(path == '/pages/index/index') {
					uni.postMessage({ data:{code} }) // 发送数据
					uni.switchTab({
						url: path
					}); // 需要路由跳转的页面
				} else {
					uni.redirectTo({
						url: path + '?code=' + code
					}); // 关闭当前页面,跳转到应用内的某个页面。 
				}
			});
		
    </script>
</body>
</html>

 但是当我测试的时候发现,通过 pc 端 进入微信小程序,H5 向 vue 传送数据失败 !!!发现是UniAppJSBridgeReady 没有触发的缘故。后来试了很多次,利用延时语句,发现是不定时的触发。后来参考了支付宝小程序的使用文档,模仿使用 window.UniAppJSBridge,完美解决问题 。最终代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>FOLLOWING进入</title>
</head>
<body>
    <!-- 微信 JS-SDK 如果不需要兼容小程序,则无需引用此 JS 文件。 -->  
    <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>  
    <!-- uni 的 SDK,必须引用。 -->  
    <script type="text/javascript" src="//js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.0.1.52.js"></script>
    <script type="text/javascript">
        // h5页面获取小程序传参
        console.log('WebVie 调试器')
        // 获取url中"?"符后的字符串并正则匹配
        function GetQueryString(name) {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
            var r = window.location.search.substr(1).match(reg); 
            var context = "";
            if (r != null)
                context = decodeURIComponent(r[2]);
            reg = null;
            r = null;
            return context == null || context == "" || context == "undefined" ? "" : context;
        }
        var code = GetQueryString('code')
        var path = GetQueryString('state')
		
		if (window.UniAppJSBridge) { // 所有主流浏览器,除了 IE 8 及更早 IE版本
			if(path == '/pages/index/index') {
				uni.postMessage({ data:{code} })
				uni.switchTab({
					url: path,
				});
			} else {
				uni.redirectTo({
					url: path + '?code=' + code
				});  
			}
		} else {
			document.addEventListener('UniAppJSBridgeReady', function() {  
				if(path == '/pages/index/index') {
					uni.postMessage({ data:{code} })
					uni.switchTab({
						url: path,
					});
				} else {
					uni.redirectTo({
						url: path + '?code=' + code
					});  
				}
			});
		}
    </script>
</body>
</html>

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我会用文回答你的问题。 Uniapp web-view 组件可以用来在小程序展示网页内容。在 web-view 播放视频时,如果不希望视频进入全屏横屏模式,可以在网页端的视频标签加入如下属性来禁止全屏横屏模式: ``` <video playsinline webkit-playsinline> ``` 这样在 web-view 播放的视频就不会进入全屏横屏模式了。 希望这个回答能帮到你! ### 回答2: uniappweb-view组件在播放视频时,全屏显示的方式并不是强制横屏模式。在uniappweb-view组件是基于WebView技术实现的,它会在应用内嵌一个浏览器窗口,使用此组件可以在页面加载并显示指定URL的网页内容。 针对web-view组件在播放视频时全屏显示的方式,uniapp并没有提供直接的横屏模式的支持。但是我们可以通过一些额外的方法来实现视频的横屏全屏效果。 一种可能的解决方案是利用uniapp提供的原生插件功能。可以通过编写原生的插件代码,针对特定设备平台进行横屏模式的支持。通过调用原生插件提供的接口,在视频播放时切换为横屏模式,从而实现全屏显示。 另一种可行的方法是通过使用特定的CSS样式来实现全屏显示。在视频播放时,通过添加CSS样式,将web-view组件的宽度和高度设置为100%或者屏幕尺寸的宽度和高度。这样,视频内容将会占据整个屏幕空间,实现全屏显示效果。 需要注意的是,不同设备和浏览器对于web-view组件的支持和显示效果可能会有所差异。因此,在实际开发,需要对不同设备和平台进行兼容性测试,确保视频全屏显示的效果能够符合预期。 总结起来,uniappweb-view组件在视频全屏显示方面并不是强制横屏模式,但我们可以通过原生插件或者CSS样式的方式来实现横屏全屏效果。希望以上回答能够对你有所帮助! ### 回答3: 在UniApp,使用web-view组件嵌入网页的视频播放器,通常情况下点击全屏按钮会触发视频进入全屏模式,但该全屏模式并非横屏模式。 UniAppweb-view组件是基于系统的WebView实现的,而WebView在移动设备上的全屏模式表现是根据系统的设置和浏览器的支持而定的。在大多数移动浏览器,进入全屏模式会让网页占据整个屏幕,但并不一定会自动旋转屏幕为横屏模式。 要实现web-view的视频全屏横屏播放效果,可以考虑以下解决方案: 1. 监听web-view的全屏事件:在进入全屏时,使用uni.hideTabBar()隐藏底部的导航栏,调用uni.setScreenOrientation({orientation: 'landscape'})进行屏幕旋转为横屏模式,同时将web-view的width和height设置为100vw和100vh,使其占满整个屏幕。 2. 自定义视频播放器控件:通过uni.ui或uni.ui-palette自定义视频播放器,在全屏按钮点击时,通过uni.requestFullScreen接口请求全屏模式,并手动旋转屏幕为横屏模式。 需要注意的是,以上方案仅在移动设备上生效,PC端的Web平台对于全屏模式可能有不同的实现方式。另外,不同浏览器对于WebView的全屏模式支持程度可能不同,建议在开发过程进行测试和兼容性处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值