【百度小程序】细数百度小程序踩的坑

最近接触百度小程序挺多,开发了几个产品,都快被百度的小程序折磨死。真的是不想吐槽了,接下来我就讲讲我遇到的坑与一些经验。

1. s-for

这个for循环的写法为 s-for=‘arr‘ 或者 s-for = ‘item,index in arr‘ 。这些到没什么,主要是s-for不能循环常数。。。这让我从微信小程序转到百度小程序不太习惯。。。官方回应说什么底层diff差异哦,后面会修复。不知道现在修复好没。

2. 自定义组件之命名与路径

引用组件的时候,在json文件中,usingComponents 选项里填入要引入的组件并自定义名称:"my-radio":"/components/bd-radio/bd-radio"。需要注意的是:这个组件的名称不支持驼峰和大写写法。路径支持绝对路径和相对路径。

3. 自定义组件之组件通讯

子组件 this.triggerEvent(‘getchange‘, idx); 触发事件,getchange是父组件需要接收的事件名,第二个参数是需要传回去的数据,最好是object,其它的参数,在2.0.3之前不支持
父组件 <my-radio bindgetchange=‘getSex‘></my-radio> bindgetchange bind后面的就是子组件传过来的事件名,再后面一个(getSex)就是父组件中定义的函数,接收的时候e.detail,就是自组件传过来的数据

4. 获取索引值

如果要获取s-for中当前点击元素的索引值,只有在元素上添加 data-idx=‘{{index}}‘ 自定义属性,然后点击事件里面,通过:e.currentTarget.dataset.idx 获取。

5. swan.request

百度小程序的 swan.request 只支持 https协议。如果你不小心接口弄成了HTTP协议的url,在开发者工具上完全没问题,但是真机调试的话,如果你运气好,就没问题,运气不好在某些手机上就会出现接口无反应的情况,并且swan.request 的fail打印出: illegal request 非法请求。但是又没报错。所以,这个情况的提示也是不明显的,谁知道那个非法请求是接口还是url地址的错啊。

还有就是百度好像并没有对这个接口中的url进行encodeURIComponent,所以如果有中文,那自己需要进行编码一次。

6. swan.setStorageSync

swan.setStorageSync 这个同步的存储数据接口,官方文档说:参数支持String key, Object/String data。我第一次使用这个接口的时候,没注意看参数,结果传了一个布尔值进去,但是使用swan.getStorageSync获取的时候,始终获取不了,结果发现数据最外层包了一个data属性。即正常是xxx:true,实际上取出来是 data:{xxx:true} 也是醉了。。。不支持的至少给个错误提示啊。。。

7. rich-text

使用rich-text富文本组件的时候

<rich-text node="{{a.b}}"></rich-text>
//如果a是后台取的,在js的data中初始化的时候,如果a设置为null,有可能会报错,导致页面复制相同的内容,即出现两个相同的内容连在一起。所以最好设置为 {} 空对象。

而且如果遇到识别不了的标签会停止渲染,并且不会有错误提示。。。

我遇到过几次出现两个相同的内容连在一起的情况,忘了截图的,具体怎样出现的也忘了。。。

8. image 组件出现 image load faild

如果遇到某些时候图片路径是正确的,但是出现 image load faild 这个错误,我也不知道怎么解决。官方回答说不影响开发就行。。。特别是从一个页面navgitor或者其它的跳转方式跳转到另外的页面,就有可能会出现这种情况。而且图片还是本地的。。。

官方回复说:image图片地址只支持https协议,并且在小程序后台进行域名配置,或者百度域名的图片,不满足条件的话,图片将无法正常显示。不过有时候还是会出现上面的问题。

9. H5支付 转到 百度支付 swan.requestPolymerPayment

关于百度小程序支付:最开始我天真的以为,web-view嵌套一个已经完善的H5商城,支付的时候也可以直接使用自己对接的H5的支付。因为在本地预览时,不管安卓还是IOS,都可以支付成功,没问题。但是只要一发布上线,支付的时候就调不起微信或者支付宝的支付弹窗了。都不能跳转到支付弹窗的页面。安卓机全部不得行IOS没问题。抓包发现结果返回正常,没有错误。我估计是百度官方屏蔽了。官方给出的回答是:为保护用户的资金安全,小程序的web-view不支持自行调用第三方支付服务。如有支付需求,建议接入百度收银台。。。但是,但是,但是。。。我看到苏宁易购的百度小程序就是使用的自己对接的第三方支付,并没有使用百度的支付接口。。。我就很奇怪了,为撒子苏宁易购就可以???

10. web-view的src也可以使用localhost

web-view的src也可以弄成IP地址的情况。比如我本地使用vue-cli运行了一个项目,假设为http://localhost:8087/szxgcs/detail.html。这时我把localhost改成自己的IP地址,然后在web-view的src中:

<web-view src=‘http://192.168.xxx.xxx:8087/szxgcs/detail.html‘></web-view>
//这样就能运行在本地的代码了

11. 使用未申明的变量,有可能会没错误提示

有时候在某些接口中,或者request的data中,使用that.data.xxx的时候,由于我粗心,that没有声明。所以在运行的时候,发现调接口没反应。但是又没有提示哪里有错,就很懵逼。所以一定要检查某些变量是否声明的。不过现在好像改好了,不声明会报错了。

12. swan.setPageInfo,小程序开启web化功能

现在落地页(即打开小程序第一眼看到的页面)如果是web-view嵌套的页面,也能配置swan.setPageInfo。而且能通过审核。不清楚是不是改了审核的条件,反正以前是不能审核通过的。swan.setPageInfo只能用于开启web化功能。为什么要配置这个?因为在百度app中,小程序无法被爬虫感知。所以需要配置,这样才能被搜索引擎抓取收录。

13. 发布审核时设置基础库版本高一点。

建议发布审核的时候,把开发者平台 --- 设置 --- 基本设置 --- 基础库最低版本设置 设置高一点。低版本出现了问题,如果是百度的问题,官方是不会给你修复的,这是官方技术人员回复我的原话。一般设置3.xxx以上就可以了,3.xxx以前的没多少用户了。这样也可以避免审核的时候测试人员在低版本测试,出现不清楚原因的bug。

14. s-if不能和s-for一起用。有可能出现不可预知的错误。还有就是 s-if 一定要写在最前面,不然有可能也会出现一些小问题。。。

.假如需要给组件传递内容,这个内容是异步获取的,那么在组件里,获取的时候,有可能会遇到获取不到传过来的内容,这个很正常。在H5的vue中,我使用v-if来避免获取不了的情况。类似:

</ child :sendval=‘data‘ v-if=‘data‘ >
//data初始化为false,这样,只有在data真实获取到内容的时候,才渲染组件。
//但是,在百度小程序中,判断条件必须写在前面即:
<child  s-if=‘data‘ :sendval=‘data‘ ></child>
//不然,还是会出现获取不了内容的情况

15. swan.createSelectorQuery() 有时需要延时获取宽高等信息。

swan.createSelectorQuery()这个获取dom元素的接口,如果获取的dom元素是动态添加的,那么,在调用boundingClientRect获取宽高等信息的时候,是需要延时获取的。这个在组件中更明显,就算组件加了s-if,在数据成功返回之后再渲染组件,但是渲染的过程也需要耗时,所以,不能及时地获取到元素的信息。就算使用swan.nextTick()也没作用,有时候也会获取不到。我设置setTimeout延时一般是150ms

16. swan.nextTick()

swan.nextTick()就是提供一个异步操作。从来就没用过,官方的描述也是云里雾里的。感觉和vue的nextTick不太一样。因为我试过相同情况下相同的代码,两个的表现不一样。

17. 慎用sConsole

web-view中的h5页面跳转到小程序有可能会打开两次。这个情况是打开了SConsole调试面板的,关闭之后就不会出现这个情况。

其它情况使用sConsole也有可能会出现某些小问题。。。也有可能会导致出现一个页面,出现两个相同body内容的情况

18. getSwanId

getSwanId在开发者工具上,返回的是SWAN-DEVELOP,而真机上是一段长度为几十个的字母和数字组成的字符串。

19. css单位

css单位基本都支持,不过如果是rpx这种,小程序会自动转换成vw或者vh,所以你会看到控制台里的单位都是vw或者vh

20. getStorage

getStorage获取本地不存在的数据,默认进入success,不会进入fail回调

21. 分享到贴吧

这个功能,官方有说明:这里是接入文档       这里是简单说明

在代码中配置好,并且上线小程序后,我以为这样就能申请分享白名单了。。。然而,按钮竟然没给我激活,点不动。。。搞不清楚原因。。。然后就放弃了

上面这些是真实遇到的情况,真的累,本来只花一天的时间搞得定的内容,一路踩坑结果多花了两三倍的时间。。。逐渐怀疑我是不是做程序员的料。。。

后面还会继续开发百度小程序,估计又会折寿了。。。

新增:

22. swan.getSystemInfoSync().host 一直显示为undefined,不管是真机还是开发者工具都不行

官方已经回复这个问题,说是:安卓最新版11.10可以获取到的,但是11.10以下的就不行,应该是双端diff。后面会修复

23. 部分iOS客户端可能出现,setInterval 只执行一次的bug

问题的源头:点这里

24. 控制台答应出来的内容显示的行号和正常console.log打印的行号位置对不上

官方回复:生成的sourceMap指向的源文件是经过babel转换后的资源,所以会存在行号对不上的情况,我们会后续修复,感谢反馈

25. 页面用es5开发,项目信息里勾选掉 ES6 转 ES5会报错

原因不清楚,解决办法就是不要管它,让它一直勾选就行了。。。。。。

26. 使用2.4.1发布小程序之后,在开发者后台的体验二维码显示的内容和发布的内容不一致。

这个bug真的是害人,浪费了很多时间。具体是怎么产生的不太清楚,我各种清除缓存,各种删除再预览还是这样,扫描本地的就是正常的,就是刚发布上线的体验版就不一样。。。。。。官方让我刷新页面再看二维码??????你在逗我??????

最后把开发者工具换成2.4.0 再发布就没问题。。。。。。所以到现在开发者工具都已经2.4.3了,我都还不敢更新。。。。。。

27.  远程调试打开之后显示404

解决办法: 首先,百度App 客户端的登录用户和开发者工具的登录用户是当前 appid(智能小程序ID)的开发者。然后,保证在同一网段即处在同一局域网中。如果满足这两个条件,还是404页面,那么就关闭控制面板中的防火墙。一般这个时候就没问题,能自动显示远程调试的控制台了。

原链接:https://www.cnblogs.com/zjjDaily/p/10984696.html

原文地址:https://www.cnblogs.com/huanghuali/p/11261931.html

时间: 2024-11-05 22:35:03

【百度小程序】细数百度小程序踩的坑的相关文章

细数php语法里的那些“坑”

尽管PHP的语法已经很松散,写起来很“爽”.但是对于像“我们”这种学过 Java. C#的“完全面向对象程序员”来说,PHP程序设计语言里,还是有一些的坑的.下面请让我来盘点一下. Parse error: syntax error, unexpected T_STRING, expecting T_FUNCTION in...... 错误原因:在PHP语法中,声明任何函数,函数名的前面需要 function 关键字. <?php //错误代码如下 class Test{ __construct

细数那些Java程序员最容易犯那些错

java作为最受欢迎程度榜榜首语言,自然是广大开发者使用最多的语言.正因为有如此广泛的使用性,java开发中发生异常也比比皆是,接下来我们就来看看那些java开发中最容易出现的那些错误. 1.重复造轮子一个明显的错误就是Java程序员习惯性的忽略已经存在的大量的库.在你决定造一个轮子之间,我建议你试着先搜一下是否有已经存在库.例如日志方面,有logback,新log4j,网络方面,有Netty或者Akka.有一些库,已经逐步变成了标准,比如Java8中加入的Joda-Time.下面讲述的是我上一

【转】小波与小波包、小波包分解与信号重构、小波包能量特征提取 暨 小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)

转:https://blog.csdn.net/cqfdcw/article/details/84995904 小波与小波包.小波包分解与信号重构.小波包能量特征提取   (Matlab 程序详解) -----暨 小波包分解后解决频率大小分布重新排列问题 本人当前对小波理解不是很深入,通过翻阅网络他人博客,进行汇总总结,重新调试Matlab代码,实现对小波与小波包.小波包分解与信号重构.小波包能量特征提取,供大家参考,后续将继续更新! 本人在分析信号的过程中发现,按照网上所述的小波包分解方法理解

小程序开发,关于小程序

简述 这两三年小程序可谓是热得冒汗啊,小巧快捷算是它的标签了.可大多数人概念中的小程序是微信小程序,其实小程序是mini-program,也有叫它smart program比如百度.它比一切自己原生开发快捷,现成的框架,规则固定方便也都是开发者的常用规则. 说到这,你可能知道了,小程序肯定不只是微信小程序,是的,比如刚说的百度小程序.支付宝小程序.今日头条小程序等. 为了节省大家的搜索时间,我在线面粘贴了链接,可以直接进入了解详情:会做前端开发基本就可以开展,后端运用相对较少. https://

超2000小程序被封!小程序创业的利弊是什么

去年1月9日小程序正式上线,在经过一年时间的升级优化后,小程序获得了耀眼的成绩.目前,小程序总数超过58万,后台开发工具的使用人数超过100万,第三方平台数已经超过2300家,且日使用用户数达到1.7亿.庞大数据的背后,是小程序带来了较大的发展空间,有着广阔的前景. 这自然也吸引到诸多创业者和投资者,数据显示2017年至少有7亿左右的资金流入到到小程序相关创业者身上.这其中,不乏真格基金.红杉资本.金沙江创投等知名投资基金.可见,小程序创业已经成为当下热潮. 小程序创业最大的利好是能够站在风口之

微信小程序视图层WXML_小程序事件

微信小程序视图层WXML_小程序事件 什么是微信小程序事件 小程序事件是视图层到逻辑层的通讯方式. 小程序事件可以将用户的行为反馈到逻辑层进行处理. 小程序事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数. 小程序事件对象可以携带额外信息,如id, dataset, touches. 微信小程序事件的使用方式 在小程序组件中绑定一个事件处理函数. 如bindtap,当用户点击该组件的时候会在该微信小程序页面对应的Page中找到相应的事件处理函数. <view id="

OSChina 娱乐弹弹弹——只想娶位如小编辑般高贵冷艳的程序媛~

啦啦啦,又到了不前不后的周三啦,你做好准备迎接周五了吗? 据广大 OScers 反应,@红薯 又霸占了热门动弹的半边天,表示强烈的不满,鄙视说:是 OSC 站长了不起啊,可是人家就是了不起啊,一天到晚的主要任务就是接客,听说,昨天他无私的为 OSC 献出了他的菊花(害羞害羞,小编可是娇滴滴的女生-),当然,也被好多人威胁要爆他菊花... 如果再出现 200 就爆 @红薯 菊花 如果再出现 404 就爆 @红薯 菊花 等恐怖言论,小心被 @红薯 封号,呜呜,小编也快混不下去了,大家要记得我啊 :(

展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告【转载】

走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的10年的路程,有些心得体会你可以借鉴一下,觉得说得有道理的你就接纳,觉得说得没道理的,你就抛弃,以下是我发自内心的,给大家的忠告,特别是针对那些小弟弟妹妹们.01. 自己的户口档案.养老保险.医疗保险.住房公积金一定要保管好.由于程序员行业每年跳槽一次,我不隐瞒大家,我至少换过5个以上的单位,这期间跳来跳去,甚至是城市都换过3个.还好户口没丢掉,其他都已经是乱了,好几个城市里,

需求:有一个猜数字小游戏,请写一个程序实现在测试类中只能使用5次,超过5次提示:游戏试玩结束,请付费。

package cn.idcast4; import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.Reader;import java.io.Writer;import java.util.Properties; /* * 需求:有一个猜数字小游戏,请写一个程序实现在测试类中只能使用5次, *