关于微信小程序webview的使用

小程序

微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验。同时提供一系列工具帮助开发者快速接入并完成小程序开发。关于如何注册配置就不多言了,本文主要还是体验了下web-view的功能。

web-view详解

有了这个组件之后,小程序可以很好的嵌入一些页面,可以环境小程序size告急的问题,同样也使开发更加便捷,毕竟小程序开发者基本都对前端开发较为了解。

web-view能力

说再多还是需要去看官方文档,web-view文档,

兼容

首先就需要注意:兼容问题,版本库和对应版本比例

基础库 1.6.4 开始支持,低版本需做兼容处理,
个人类型与海外类型的小程序暂不支持使用。

目前而言,基本80%的用户会升级微信,所以其实不必担心版本问题,官方截止2017-12-01提供的数据也说明88%的用户支持web-view

使用

web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面;

属性:src 是String类型,是一个网站的url,默认值是nonewebview 指向网页的链接。需登录小程序管理后台配置域名白名单。

<!-- wxml -->
<!-- 指向微信公众平台首页的web-view -->
<web-view src="https://mp.weixin.qq.com/"></web-view>

可以配合Page实例的onLoad方法来获取url的具体值,也就是一个微信小程序页面中只有一个web-view,但是这个web-view的内容可以根据上一个页面传递的参数来获取页面URL,后面会讲如何实践,


官方提供如下接口:

  • web-view和小程序的通信

1. 由小程序到`web-view`,其实本质上`WEB-VIEW`也是小程序的一个页面,所以小程序到`web-view`是正常的小程序间的通信,通过`wx.navigateTo`、`wx.redirectTo`,带上`url`参数,`query`参数就像正常`url`的参数一样跟着后面,然后在`web-view`的页面的`Page`实例里面通过`onLoad`的方法的参数来获取`url`的值,设置给`web-view`的`src`属性为改值即可。
2. 由`web-view`到小程序,由于在`web-view`的跳转通常是在`src`对应的网页中的操作来处理的,所以需要结合`jssdk`来处理,不需要`wx.config`配置,直接通过`script`标签来引入`res.wx.qq.com/open/js/j`,就可以使用`wx.miniProgram.navigateTo`、`wx.miniProgram.navigateBack`、`wx.miniProgram.switchTab`、`wx.miniProgram.reLaunch`、`wx.miniProgram.redirectTo`接口,就像小程序之间的跳转一样,单是只能在当前小程序页面内跳转。

  • 支持以下部分JSSDK接口图像、音频、摇一摇、地理位置等信息,具体可以查看web-view文档,不过这些需要通过wx.config来授权,就和服务号开发类似。
  • 用户分享时可获取当前<web-view/>URL,即在onShareAppMessage回调中返回webViewUrl参数。
Page({
  onShareAppMessage(options) {
    console.log(options.webViewUrl)
  }
}) 
  • 在网页内可通过window.__wxjs_environment变量判断是否在小程序环境。

// web-view下的页面内 console.log(window.__wxjs_environment === 'miniprogram') // true

web-view实践

在目前实践了部分web-view的功能,

//index.js
Page({
    data: {
       url: 'https://test.com'
    },
    onLoad: function(options){
        options.url ? this.setData({url: options.url}) : wx.navigateBack({delta: 2});

    }
});

//index.wxml
<web-view src="{{url}}"></web-view>

在这个web-view中,指向的就是https://test.com的内容,所以在在https://test.com中跳转出回到小程序,需要修改https://test.com中的JavaScript,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>test</title>
    <link rel="stylesheet" href="https://test.com/index.css" />
</head>
<body>
    <div class="app">
        <h1>webview-wechat-detail</h1>
        <p>
            detail
        </p>
        <button type="button" id="btn">返回小程序</button>
    </div>
    <script src="https://test.com/jquery.js"></script>
    <script src="https://res.wx.qq.com/open/js/jweixin-1.3.0.js"></script>
    <script>
        /* eslint-disable */
$(function(){
    doucument.cookie = 'bb=bbbbbb';
    $('#btn').on('click',function(s) {
        document.cookie = 'aa=ssssss';
        wx.miniProgram.navigateTo({
            url:'/pages/index?test=testtest',
            success: function(){
                console.log('success')
            },
            fail: function(){
                console.log('fail');
            },
            complete:function(){
                console.log('complete');
            }

            });
        });
    });
    </script>
</body>
</html>

如果需要使用一些其他的的jssdk的方法,那就需要参照公众号的开发配置了。

web-view采坑

由于很多使用中的一些问题

1.打开的域名没有在小程序管理后台设置业务域名(注意是业务域名,不是服务器域名)
2.打开的页面必须为https服务
3.打开的页面302过去的地址也必须设置过业务域名
4.web-view空白问题,请升级微信客户端到 6.5.16
5.页面可以包含iframe,但是iframe的地址必须为业务域名
6.web-view不支持支付能力,web-view的API能力见web-view的文档说明
7.开发者自己检查自己的https服务是否正常,测试方法:普通浏览器打开对应的地址
8.如果web-view使用了公众号授权的服务,开发者工具提示网页开发者的问题,请见: 公众号开发
其他的问题注意:
  1. 每个页面只能有一个<web-view/>,<web-view/>会自动铺满整个页面,并覆盖其他组件,小程序对webview的监控状态基本没有,只能设置src设置url。
  2. 关于小程序和web-view的通信,<web-view/> → 小程序只能通过JSSDK 1.3.0提供的接口返回小程序页面,设置参数来传值,反之,小程序到webview也是一样的,只能是src的路径带上参数;
  3. web-view不支持支付能力,是指无法唤起小程序的直接支付窗口,对于h5的那套支付应该是支持的,但是web-view 里边没法使用 微信支付的 JSAPI,也就是可能可以h5的相关的的支付中心来支付;
  4. 关于层级,在webview中可以无限跳转,对于导航条返回和物理键返回都会回到上一个页面直到退出webview,就像history.back
  5. webview中的html的title会自动放到小程序的头部作为标题;
  6. webview中可以正常使用ajax之类的操作。
  7. 一些可能的问题问题汇总
本文作者:caoweiju
原文地址: 关于微信小程序webview的使用-实战教程-小程序社区-微信小程序-微信小程序开发社区-小程序开发论坛-微信小程序联盟
<think>好的,我现在需要解决用户在微信小程序使用webview加载页面时隐藏视频播放器默认控件的问题。首先,我得回忆一下微信小程序webview组件和相关限制。根据引用[2],原生组件在webview中有一些限制,比如不能在scroll-view等组件中使用。这可能意味着在webview中嵌入的H5页面里的视频控件,可能受到这些限制的影响。 接下来,用户的需求是隐藏视频的默认控件。通常,在网页中隐藏视频控件可以通过HTML5的video标签属性来控制,比如移除controls属性。但用户可能已经尝试过这种方法,但不确定在微信小程序webview环境下是否有效,或者是否有额外的注意事项。 根据引用[3],提到在Android的WebView中网页被放大的问题,可能需要设置WebSettings的属性。虽然这里的问题不同,但思路类似,可能需要通过调整WebView的设置来控制视频控件的显示。不过,微信小程序webview是否允许这样的设置呢? 根据微信官方文档,web-view组件允许通过src属性加载H5页面,但对页面内的控制主要依赖于H5自身的实现。因此,隐藏视频控件应该在H5页面内部处理,比如修改video标签的controls属性。例如,在H5页面中,将video标签的controls属性设置为false,或者通过CSS样式隐藏控件。 此外,引用[1]提到微信小程序webview的交互方法,可能需要通过H5页面和小程序之间的通信来触发隐藏控件的操作。例如,H5页面通过微信JSBridge向小程序发送消息,然后小程序端接收消息并执行相应的操作。不过,隐藏控件本身应该由H5页面处理,可能不需要小程序的直接干预。 需要注意的是,微信小程序webview可能存在一些限制,比如不允许自动播放视频或需要用户交互才能播放。这些策略可能影响视频控件的显示和交互,但具体隐藏控件的方法还是取决于H5页面的实现。 总结一下,可能的解决方案有两种:一是在H5页面中直接修改video标签的属性或样式来隐藏控件;二是通过小程序与H5的通信机制,动态控制控件的显示。根据用户提供的引用,第一种方法更直接,而第二种可能需要更复杂的交互,但引用[1]中的交互方法可以支持这种通信。 最后,需要验证这些方法的可行性,并考虑不同平台(iOS和Android)的兼容性,以及微信小程序的最新政策是否有相关限制。</think>在微信小程序使用`web-view`加载H5页面时,隐藏视频播放器的默认控件可以通过以下方法实现: --- ### **方法一:在H5页面中直接控制video标签** 1. **移除`controls`属性** 在H5页面的`<video>`标签中,**不添加`controls`属性**,或通过JavaScript动态移除。默认情况下,浏览器会隐藏控件。 ```html <video src="video.mp4" width="100%" height="100%"></video> ``` 2. **通过CSS自定义样式** 如果仍需部分控件功能,可以通过CSS覆盖默认样式(但需注意浏览器兼容性): ```css video::-webkit-media-controls { display: none !important; } ``` --- ### **方法二:通过小程序与H5的交互动态控制** 若需要根据小程序逻辑动态隐藏控件,可通过**H5与小程序通信**实现: 1. **H5页面监听小程序消息** 在H5页面中引入微信JS-SDK,监听小程序发送的消息: ```javascript document.addEventListener('WeixinJSBridgeReady', function() { WeixinJSBridge.on('message', function(data) { if (data.action === 'hideControls') { const video = document.querySelector('video'); video.removeAttribute('controls'); } }); }); ``` 2. **小程序发送隐藏指令** 小程序通过`web-view`的`bindmessage`接收H5消息,并通过`postMessage`发送指令: ```html <web-view src="https://your-h5-page.com" bindmessage="handleMessage"></web-view> ``` ```javascript // 小程序端发送指令 Page({ handleMessage(e) { const webviewContext = e.detail.postMessage; webviewContext.postMessage({ action: 'hideControls' }); } }); ``` --- ### **注意事项** 1. **原生组件限制** `web-view`中的视频播放可能受限于小程序的原生组件规则。例如,全屏播放时会脱离`web-view`层级,需通过`<video>`组件的原生属性控制[^2]。 2. **跨平台兼容性** - iOS:通常可通过移除`controls`属性直接隐藏控件。 - Android:部分机型可能需要额外设置`webSettings.setMediaPlaybackRequiresUserGesture(false)`(需在H5端配置)。 3. **自动播放策略** 微信浏览器可能要求**用户交互后才能播放视频**,需在H5页面中添加点击事件触发播放。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值