微信小程序開發中遇到的問題與技巧匯總

從微信小程序發布到現在經手的小程序也有好幾個了,開發過程中多少會遇到一些坑,這里匯總一下開發中遇到過的坑與小程序開發技巧。

首先我要先吐槽一下mpvue。
由于我之前做過的小程序全部都是原生開發,最近的一個項目一開始的選型是準備使用mpvue的,我自己也想嘗嘗鮮,但是在做完基礎準備,開始開發的第三天在寫一個帶輸入框的組件時遇到了嚴重的bug,以至于所有組件形式的輸入框全部都不能使用。
在github上看了mpvue dev分支上的提交記錄,最近一次是半個月前的,提交了部分代碼并添加了數個使用者。還好當時果斷放棄mpvue轉為原生開發,才使得項目按時上線。
在寫這篇文章的時候,我又查看了mpvue的提交記錄,最近一次為18天前,提交的內容僅僅是添加了readme中的使用者。合著這一個月mpvue正真的代碼提交只有一次。感覺美團造了mpvue這個輪子后,對其更新與修復并不是很上心,反觀wepy,差距真心大。
這里建議大家小程序開發還是使用原生開發的好,mpvue、wepy最好不要使用,wepy雖然有人維護,但其bug也不少,原生開發才是最穩的選擇,小程序一旦有任何更新這些框架可不一定來得及作出調整。


開發中遇到的問題:

1、textarea層級最高的Bug、由于textarea使用的是原生組件,它的層級最高,會產生很多詭異的Bug,具體可以看這里這里的末尾幾行。
2、微信小程序碼僅僅針對線上,開發版與體驗版掃碼會提示該小程序未發布。
測試小程序碼的方法:

  • 設置編譯模式參數測試小程序碼
    如配置url:pages/index/index?scene=6430277129069593265,scene為小程序碼B接口所帶參數(多參數可自定義符號分割,長度不可超過32個字符)
onLoad (options) {
  // 這里就可以拿到小程序碼中的參數6430277129069593265
  console.log('二維碼進入', decodeURIComponent(options.scene)
}    
  • 直接將生成的二維碼通過開發者工具的‘二維碼編譯’解析出來(雖然這種方式是最好的選擇,但自己嘗試解析不出來,全部都跳轉了首頁)
所以不建議在自己所開發的第一個版本小程序就上線小程序碼功能,可在第一個版本預留頁面,在onLoad中預先寫好測試代碼,以供后續版本調試小程序碼使用,確保下次上線小程序碼一次成功。

3、iOS端,page中開啟了下拉刷新,又使用了 toast / loading,下拉刷新時頁面會有一個很大的回彈動作,解決方法為去掉微信的toast / loading或自己寫loadinng彈框。
4、在組件中使用keyframes 不生效的問題
問題代碼如下:

@-webkit-keyframes __spinner-loading {
 from,
 to,
 40% {
  background-color: #888;
 }
 33.333% {
  background-color: red;
 }
}

原因: 33.333% 改為33%即可
5、button有最小尺寸。
6、wxss不支持部分css3選擇器。
7、canvas 不支持 overflow:hidden,具體見這里
8、兩個canvas疊加在一切,之后進行的一切繪制,dom層級最后的canvas所繪制的東西永遠會在最前端,
解決方法:將要放在下層的canvas的wxml寫在前面。
9、 <scroll-view>必須設置高度,否則無法監聽相關事件。
10、<scroll-view>不能通過絕對定位,上下左右0,來設置全屏鋪滿,需調用wx.getSystemInfo方法獲得屏高,設置style=“height:{{ heightNumber }}px;”
補充:可以在css中為其設置高度為 vh (如:100vh)無需js獲取高度也可正常使用。
11、tab頁中使用‘wx.getSystemInfo’來獲取屏幕高度,真機獲取的高度比開發工具少48,這48為tabBar的高度。
12、小程序不能做indexOf以及部分運算,如:{{ useList[index].labIndex.indexOf(lab) > -1 ? 'lab_active' : '' }}
13、小程序不易打開過多頁面,目前頁面路徑最多只能打開十層。
14、小程序測試支付需要掃生成的二維碼,而且后臺設置金額total_fee單位為分(int),否則報錯‘缺少支付total_fee’。
15、

QQ瀏覽器截圖20180819143346.png

16、小程序canvas無法直接繪制網絡圖(開發工具有效,真機無效)
需要使用 downloadFile API 下載圖片后繪制,且圖片地址必須配置在后臺的‘downloadFile合法域名中’

無效
const cardBg = 'https://image.shanglishi.com/share-BJ.png'
ctx.drawImage(cardBg, 0, 0, 250, 200) 
ctx.draw()

有效
wx.downloadFile({
   url: cardBg ,
   success: function (res) {
     ctx.drawImage(res.tempFilePath, 0, 0, 250, 200)
     ctx.draw()
   }
})

17、canvas繪制圓形圖片,開發工具與真機存在差異
18、input獲得焦點,軟鍵盤彈出,光標與鍵盤默認距離為0,鍵盤會遮擋住部分元素,可設置cursor-spacing(int)來設置鍵盤與光標的距離,以顯示完整元素
19、小程序view英文數字不換行的問題,添加word-break:break-all;即可


小程序開發技巧:

1、小程序調用子組件方法

<countdown id="countdown"></countdown >
onReady() {
    this.countdown = this.selectComponent('#countdown')
    this.countdown.start()
}

2、直接改動上一個頁面的data。

const pages = getCurrentPages(); // 當前頁面
const prevPage = pages[pages.length - 2]; // 上一頁
prevPage.setData({ // 直接給上一頁面賦值
  selectCity: info,
});

3、微信群只顯示首字母
分享到群的信息只能拿到群ID
<open-data type="groupName" open-gid="{{openGId}}" />獲取到的又是完整群名
只顯示首字母有兩種方法:

  • 足夠大的字體與足夠大的字間距,只保留第一個字,將其余的字擠下去,父元素溢出隱藏。
    該方法只支持純中文或純英文,中英混雜會出現一個中文和一個英文同時出現的情況。
<view class='big-qun-name'>
  <open-data type="groupName" open-gid="{{ item.open_gid }}"></open-data>
</view>
.test open-data{
   width: 100rpx;
   height: 100rpx;
   line-height: 100rpx;
   font-size: 51rpx;
   letter-spacing:1px;
   display: block;
   color: #fff;
}
  • 設置字體為0,使用css3給首字母設置字體大小。
    該方法使用起來時好時壞,不太建議使用。
<view class="nc-img__text" wx:else>
  <open-data openGid="{{groupid}}" type="groupName" ></open-data>
</view>
.text {
    width: 50px;
    height: 50px;
    border-radius: 50px;
    background-color: #b8b8b8;
    color: #fff;
    font-size: 60rpx;
    display: flex;
    justify-content: center;
    align-items: center;
    position: absolute;
    left: -1px;
    top: -1px;
}

.text open-data {
    width: 50px;
    height: 50px;
    line-height: 48px;
    display: block;
    text-align: center;
    font-size: 0;
}

.text open-data::first-letter {
    font-size: 60rpx;
}
可以考慮使用群成員的頭像來表示該群。

4、去除小程序<button>的默認樣式

button.remove-btn-style{
  outline:none;
  border:none;
  list-style: none;
  border-radius:0;
}
button.remove-btn-style:after{
  outline:none;
  border:none;
  list-style: none;
}

注意點:

1、正式上線接口需要使用https,接口需在后臺配置白名單,白名單一個月只能修改五次,建議一次多配置幾個,直接將測試環境與生產環境域名配全,避免多次修改帶來的麻煩。
2、請求白名單配置有延遲,可能開發工具請求不了手機卻可以、等待幾分鐘后再次嘗試即可。
3、https可以使用內網穿透到本地。
4、上線測試版本需要小程序關聯公眾號。
5、由于微信修改了getUserInfo機制,所以不要在進入小程序調用wx.login之后立刻調用wx.getuerinfo,一方面用戶很大概率會點擊拒絕授權導致小程序功能無法使用,另一方面由于wx.login已經可以用于用戶登錄,我們應在需要的時候再調用,詳細調整點擊這里。
6、微信修改了分享機制,導致開發者拿不到任何分享后的回調(成功、失敗、完成)

  • 對于想要獲取分享結果的今后將無法實現;
  • 對于想要獲取分享信息的,可在分享后點擊群內分享消息卡片,在App的onLaunch與onShow(建議在onShow中獲取,onLaunch在小程序整個生命周期中只會執行一次)中可獲取shareTicket ,用來換取群唯一標識 openGId ,進而顯示對應群的相關信息的小程序。

詳見這里

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容