微信小程序开发所遇到的问题,可能是基础性的,也可能是比较难以攻克的问题。对于开发新手来说,可能遇到的更多是基础性的问题。本文就总结些类似的问题及其解决方法或者答案,供小程序开发者参考一下。
1、为何脚本内不能使用window等对象?
答:微信小程序页面的脚本逻辑的运行是在JsCore中,而JsCore是一个无窗口对象的环境,因此也不能在脚本中使用window跟操作组件。
2、为何zepto/jquery 无法使用?
答:上一个问题说过,微信小程序脚本内无法使用window等对象,而zepto/jquery 会使用到window对象和document对象,因此它也无法使用。
3、为什么wx.navigateTo无法打开页面?怎么办?
答:一个应用最多支持同时打开五个页面,达到5个之后再想打开页面,则wx.navigateTo无法支持新页面的正常打开。这种情况的解决方法是避免多层级的交互方式,或者使用wx.redirectTo。
4、样式表支持什么样的选择器?
答:微信小程序样式表是不支持级联选择器的,它支持的是以.开始的类选择器。
5、本地资源的获取方法是什么?
答:微信小程序的本地资源无法通过css获取,想要获取可以使用网络图片或者 base64,
又或者使用<image/>标签来实现资源的获取。
6、为什么小程序代码上传不成功?原因是什么。
答:微信小程序编译后的代码包需小于等于2M,若是超过2M则代码包将上传失败。
7、HTTPS 请求不成功的原因?
答:tls仅支持 1.2 及以上版本,才能请求成功。
8、网络请求的referer设置格式问题。
答:网络请求的 referer 是不可以设置的,它有固定的格式,其固定格式为https://servicewechat.com/{appid}/{version}/page-frame.html。其中 {appid} 为微信小程序的 appid,{version} 为小程序的版本号,版本号为0的话则表示为开发版。
9、微信小程序能否支持fetch或promise?
答:目前微信小程序不支持promise工具,而fetch只是客户端不支持,工具下各版本必须保持统一。
10、touchmove滑动事件里面的currentTarget. id值不变动,是为什么?
答:ouchmove / touchend 事件的 target / currentTarget 会永远是 touchstart 时的 target / currentTarget,不会存在变动情况。
11、小程序支持SVG吗?
答:小程序目前支持image的src放远程svg,以及background-image里的svg。
12、组件的动态生成与销毁问题
答:小程序暂时不支持动态生成组件,但可以用 wx:for 去渲染多个组件。
13、一些接口的回调IOS和Android不一致怎么办?
答:目前存在的一些接口的回调IOS和Android不一致的情况。比如支付接口,在用户取消支付后,ios只回调complete方法,android则回调fail方法,而且官方开发文档对此没有任何回调说明,因此会造成开发难度增加。目前这个问题尚无明确解决方案,只能等待官方对问题进行反馈。
14、如何修改窗口的背景色?
答:修改窗口的背景色的方法是,使用page 标签选择器,来修改顶层节点的样式。
page {
display: block;
min-height: 100%;
background-color: red;
}
15、为什么不能直接操作 Page.data?
答:在开发微信小程序时,应该要避免在直接对 Page.data 进行赋值修改,需要修改赋值时,请使用 Page.setData 进行操作,这样才能将数据同步到页面中进行渲染怎么获取用户输入。而能够获取用户输入的组件,则需要使用组件的属性bindchange将用户的输入内容同步到 AppService。示例代码如下。
<input id="myInput" bindchange="bindChange" /><checkbox id="myCheckbox" bindchange="bindChange" />
var inputContent = {}
Page({
data: {
inputContent: {}
},
bindChange: function(e) {
inputContent[e.currentTarget.id] = e.detail.value
}
})
16、wx.request的POST方法的参数传输,服务器接收不到的bug的原因,如何解决?
答:wx.request post的content-type会默认为“application/json“,如果服务器没用到json来解释的话,想解决这个问题,可以把content-type 设置回urlencoded。代码如下:
wx.request({
....
method: "POST",
header: {
"content-type": "application/x-www-form-urlencoded"
},
...
})