微信小程序开发中遇到的坑和解决办法

栏目: IOS · Android · 发布时间: 6年前

内容简介:这里拿解决办法:利用cover-view 组件,原生组件只支持嵌套

video、canvas、camera 等原生组件层级最高,其他组件无论 z-index 为多少,都无法覆盖在原生组件上。

这里拿 video 组件做示例,如果需要点击视频支持微信开放能力,例如授权手机号,获取用户信息等,必须要利用 button 组件,如果在原生组件外层添加 button 组件,点击视频并不会触发 button 事件,代码如下,这里点击视频并不会弹出授权手机提示,触发 getPhoneInfo 函数。

<button open-type='getPhoneNumber' bindgetphonenumber='getPhoneInfo'>
    <video src="{{videoUrl}}"></video>
</button>
复制代码

解决办法:利用cover-view 组件,原生组件只支持嵌套 cover-viewcover-image 组件,且 cover-view 内可以使用 button 。 代码如下,同时用 css 隐藏 button ,并全覆盖 video 即可实现点击视频弹出授权手机提示,此时点击控制栏无效。这里视频是自动播放不可控,如果需要控制视频或者是自定义播放按钮图标等,可以在 button 内嵌套 cover-image 自定义即可。

<video src="{{videoUrl}}" autoplay controls="{{false}}">
    <cover-view>
        <button open-type='getPhoneNumber' bindgetphonenumber='getPhoneInfo'>
            <cover-image src="{{imgUrl}}" />
        </button>
    </cover-view>
</video>
复制代码

tips: video 的层级问题在开发者 工具 中不会显露出来, z-index 会起作用,一定要在真机上测试。

2、ios和android部分组件表现的差异

ios存在的问题:

video :微信最小化后正在播放的 video 会暂停,需要再次点击播放按钮,如果视频设置的是不可控,没有开始播放按钮,视频暂停了就无法继续播放了,android没有该问题。

<video id="video" src="{{videoUrl}}" loop autoplay controls="{{false}}">
</video>
复制代码

解决办法:创建 video 上下文 VideoContext 对象,页面每次onShow的时候执行相应操作。

onReady: function () {
    this.videoContext = wx.createVideoContext('video')
},

onShow: function () {
    if (this.videoContext) {
        this.videoContext.play()
    }
},
复制代码

android存在的问题:

input :限制了输入的最大长度,达到最大长度后再次输入是没有显示的,但是 inputvalue 值包含最大长度后面的输入。

<input bindinput='phoneChange' maxlength="4" type="number" />
复制代码
phoneChange: function(e){
    console.log('e.detail.value) 
    //小键盘输入12345,实际获取到的ios的值为1234,android是12345,input组件显示的是1234
}
复制代码

3、登录之后的session_key失效

冷启动进入小程序, app.jsonLaunch 调用登录接口,通过登录 code ,后端拿到 session_key 之后,后续可解密 encryptedDatagetPhoneNumbergetUserInfo ),校验用户信息 signature ( getUserInfo ),如果后续用户一直是热启动进入小程序,不会在 onLaunch 中重新登录,同时用户没有在小程序有过操作从而延长 session_key 的有效期,后续操作就会出现 session_key 失效,报错。

解决办法:在 onShow 中调用登录接口,同时为了避免没必要的调用,可通过wx.checkSession( )检查登录状态是否过期,如果过期就重新登录,代码如下。

onShow: function () {
    wx.checkSession({
        success: () => {
            wx.login({
                success: res => {
                    if (res.code) 
                        wx.request({  // 换取openid,session_key等信息
                            url: 'https://test.com/onLogin',
                            data: {
                                code: res.code
                            },
                        })
                    }
                },
            })
        },
    })
},

复制代码

4、预览文档问题

两种方法:

1 web-view 组件

在微信后台设置好域名后直接调用

<web-view src="{{url}}"></web-view>
复制代码

如图所示:

微信小程序开发中遇到的坑和解决办法

但是android会下载该文件,这并不是用户想看到的,也可以考虑用以下方法。

2 wx.openDocument( )

wx.downloadFile({
    url: 'http://example.com/somefile.pdf',
    success: function(res) {
        const filePath = res.tempFilePath
        wx.openDocument({
            filePath: filePath,
            success: function(res) {
                console.log('打开文档成功')
            }
        })
    }
})
复制代码

效果图如下:

微信小程序开发中遇到的坑和解决办法

对比两个方法的效果图,可以看到方法2是跳出了小程序的,无法使用小程序提供的功能菜单了。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C++程序设计

C++程序设计

谭浩强 / 清华大学出版社 / 2004-6-1 / 36.00元

《C++程序设计》作者深入调查了我国大学的程序设计课程的现状和发展趋势,参阅了国内外数十种有关C++的教材,认真分析了学习者在学习过程中遇到的困难,研究了初学者的认识规律。在本书中做到准确定位,合理取舍内容,设计了读者易于学习的教材体系,并且以通俗易懂的语言化解了许多复杂的概念,大大减少了初学者学习C++的困难。C++是近年来国内外广泛使用的现代计算机语言,它既支持面向过程的程序设计,也支持基于对......一起来看看 《C++程序设计》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具