请选择 进入手机版 | 继续访问电脑版
查看: 965|回复: 0

[工具动态] 开发者注意,本季度非兼容性升级

[复制链接]
发表于 2020-4-15 17:38:41 | 显示全部楼层 |阅读模式
尊敬的开发者:
小程序基础库即将进行以下调整。
预计上线时间:2020年3月底
开发者工具验证方式:
下载最新rc版本的开发者工具,切换基础库:3.150.255-rc
真机验证方式:
使用最新版本百度APP,扫下方二维码打开调试工具小程序
然后在替换SwanCore一栏,扫下方的二维码替换基础库。当提示替换成功后,重新启动百度APP。验证完成之后,您可以关闭强制使用Debug SwanCore一栏,切换回原基础库。

一、小程序跳转功能改动
现状
「小程序跳转功能」是通过 swan.navigateToSmartProgram 打开另一个小程序,在参数 path 中 ? 后面的部分会成为 query,在小程序的 App.onLaunch、App.onShow 和 Page.onLoad 的回调函数中可以获取到 query 数据。
目前存在以下问题:
1. 如果您对query进行了一次 encodeURIComponent 编码处理,在生命周期回调中获取到的是解码后的数据。 并且某些情况下数据会出现错误。
2. 跳转之后,query中的 + 号会被转为空格;
详细变更
1. 如果 path 参数为 index?key=a+b ,修改前获取到的 query 为 {key: 'a b'} ,修改后为 {key: 'a+b'}
2. 如果您已经对 query 进行了编码,例如 index?key=%E4%B8%AD%E5%9B%BD ,修改前获取到的 query 为 {key: '中国'} ,修改后为 {key: '%E4%B8%AD%E5%9B%BD'}
具体代码举例如下:
// 调用api跳转小程序,并在path参数中附带queryPage() {    navigateToOtherApp() {        swan.navigateToSmartProgram({            appKey: 'appKey',             // 例1            path: 'index?key=a+b',            // 例2            // path: 'index?key=%E4%B8%AD%E5%9B%BD'                        // 通过该参数来进行兼容处理,默认为false。 设置为true即可切换为修改前的版本            queryDecode: false        });    }}// 跳转后的小程序页面page.onLoad 。另外app.onLaunch、app.onShow的变更方式与此一致。Page() {    onLoad(data) {        // 对于例1, 修改前打印出{key: "a b"},修改后打印出{key: "a+b"}        // 对于例2, 修改前打印出{key: "中国"}, 修改后打印出{key: "%E4%B8%AD%E5%9B%BD"}        console.log(data);    }}
兼容方式
我们为 swan.navigateToSmartProgram 增加了一个boolean类型参数 queryDecode ,默认值为 false 。如果设置为 true 可将api切换为修改前的版本。

二、禁用、限制部分全局变量
具体包括如下内容
禁用 eval
禁用 requestAnimationFrame
禁止 setTimeout、setInterval、setImmediate 第一个函数变量传入字符串
禁止使用 Function 动态创建函数,除了一种情况, Function('return this') ;此时函数的调用结果,即 Function('return this')(),返回一个全局唯一的空对象
global 变量变更为一个全局唯一的空对象

三、全面开启严格模式
现状
目前,普通编译得到的小程序包会开启严格模式,而依赖分析不会。之后,依赖分析编译也会开启严格模式。、
造成的影响
请参考MDN 文档 严格模式

四、video组件播放按钮展示策略改动
问题说明
小程序video组件修改播放按钮展示策略,新增 play-btn-sition属性,用于指定播放中播放按钮的位置,与show-play-btn属性配合使用。
play-btn-position 属性上线后,会修改现有的播放按钮展示逻辑,修改前后对比如下。
可能造成的影响
1、若线上小程序使用视频播放器将 show-play-btn属性设置为false,待play-btn-position属性上线后会出现处于【播放中】的视频没有暂停按钮了,用户无法在播放器中操作视频暂停播放的情况。
2、若开发者将show-center-play-btn属性和show-play-btn属性均设置为true,原本会在视频播放时既展示底部播放按钮也展示中间的播放按钮,本次改动上线后,则只会展示底部播放按钮。不会再同时出现两个播放按钮了。
兼容方式
1、对于将show-play-btn属性设置为false 且 show-center-play-btn属性设置为 true 的情况,为保证与原有播放按钮展示策略一致,建议将play-btn-position属性设置为true同时将play-btn-position属性设置为center即可在【播放中】只展示中间的播放按钮。
2、对于同时将show-play-btn属性和show-center-play-btn属性均设置为true的情况,根据新的播放按钮展示策略,无法做到兼容,需要注意,新播放按钮展示策略上线后,【播放中】将不再会同时出现两个播放按钮了。
此外,建议各位开发者重新check video组件相关属性设置逻辑,根据新调整的播放按钮展示策略进行修改。

五、【swan.onCompassChange/swan.onAccelerometerChange/swan.onDeviceMotionChange】无法主动开启数据变化监听的非兼容性改造
【现状描述】
swan.onCompassChange/swan.onAccelerometerChange/swan.onDeviceMotionChange 三个API是对设备的罗盘数据/加速计数据/设备方向数据的数据变化监听的api。
目前在小程序,在不调用 swan.startCompass/swan.startAccelerometer/swan.startDeviceMotion 时,单独调用数据变化监听的api也能正常对数据变化进行监听,但是数据变化的返回频率为默认频率;
【问题描述】
目前的实现方式会存在以下问题:
swan.onCompassChange/swan.onAccelerometerChange/swan.onDeviceMotionChange 无法依照开发者预期的频率返回变化数据并调用开发者回调函数
【详细变更】
1. 调用 swan.onCompassChange/swan.onAccelerometerChange/swan.onDeviceMotionChange 仅为设备数据变化增加事件监听器,但不会主动触发开发者针对数据变化的回调函数
【可能造成的影响】
对于单独调用 swan.onCompassChange/swan.onAccelerometerChange/swan.onDeviceMotionChange 的开发者,会出现监听设备数据变化的函数无法执行的情况
【兼容方案】
1. 在使用 swan.onCompassChange/swan.onAccelerometerChange/swan.onDeviceMotionChange 之前,首先调用swan.startCompass/swan.startAccelerometer/swan.startDeviceMotion 使上述事件监听具备触发机制;
【代码示例】
正确的设备数据变化监听的流程, 以Accelerometer为例:
Page({    Accelerometer() {        // 开启加速度数据监听        swan.startAccelerometer({interval: 'ui'});        // 设置监听数据变化回调函数        swan.onAccelerometerChange(res => {            console.log('加速度数据', res);        });        // 停止加速度数据监听        swan.stopAccelerometer({interval: 'ui'});    }});
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Archiver|Baidu Inc.

GMT+8, 2021-4-17 07:54 , Processed in 0.285979 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2011 Comsenz Inc.

返回顶部