微信小程序遇到的一些坑

小程序的坑

本文主要記錄下在寫微信小程序的時(shí)候遇到的一些問題,希望對遇到相同問題的朋友能有個(gè)幫助。

1. 使用canvas 繪制海報(bào)的時(shí)候 當(dāng)調(diào)用生成圖片方法wx.canvasToTempFilePath 報(bào)錯(cuò) :canvasToTempFilePath: fail canvas is empty

錯(cuò)誤:調(diào)用該方法當(dāng)時(shí)候頁面渲染并未完成

解決: 將wx.canvasToTempFilePath 的調(diào)用放到onReady() 的生命周期時(shí)進(jìn)行調(diào)用即可。

2. 小程序UI 實(shí)現(xiàn)背景半透明內(nèi)容不透明

錯(cuò)誤:通過opacity 給出半透明,被小程序不識別。

 {
     background:#000000;
     opacity:0.5;
 }

解決:可以使用rgba 來設(shè)置半透明 就可以避免內(nèi)容的透明

 {
     background: rgba(0, 0, 0, 0.5);
 }

3. 在申請定位等權(quán)限等時(shí)候,打開權(quán)限設(shè)置,需要用戶tap才能生效

錯(cuò)誤:第一次申請定位,點(diǎn)擊取消,再次定位,彈出model框,點(diǎn)擊確定后打不開權(quán)限設(shè)置頁面,提示錯(cuò)誤:openSetting:fail can only be invoked by user TAP gesture.

解決: 主要原因是在彈出model等時(shí)候使用promise , 修改成正常的 wx.showModel() 就可以了。

4. 使用批量生成小程序碼

錯(cuò)誤:無法在前端完成定制化的二維碼生成。

解決:

  • 思路:通過后端操作包裝微信批量生成二維碼的接口讓前端通過一個(gè)get請求 可以直接獲取圖片,便于標(biāo)簽展示和canvas繪制圖片。

  • 實(shí)現(xiàn):

    • 前端發(fā)送請求按照如下方式,這里的參數(shù)需要進(jìn)行base64 以防止轉(zhuǎn)義。
     // 這里的對象結(jié)構(gòu)和后端約定好
     let qrCodePicParam = {
      appId: APP_ID,
      secret: APP_SECRET,
      params: {
        scene: 'id=123',
        page: 'pages/detail/detail',
        width: 140
      }
    };
    
    qrCodePicParam = Base64.encode(JSON.stringify(qrCodePicParam))
    const qrCodePic = `${后臺域名路徑}/${qrCodePicParam}.jpg`
    
    
    • 后端在獲取到接口請求后 ,先通過微信提供的接口獲取最新的token ,然后調(diào)用批量生成二維碼接口,最后將獲取到的字節(jié)碼進(jìn)行base64 返回,模仿成圖片格式返回。
  • 注意:

    • 掃描二維碼后,獲取參數(shù)信息通過調(diào)用微信提供的API,這里獲取到的scene 為 'id=123', 如果要使用123,需要截取字符串才行,所以如果參數(shù)只有一個(gè), 建議直接在生成的時(shí)候給出數(shù)值就好。
    const {query} = wx.getLaunchOptionsSync()
    const scene = decodeURIComponent(query.scene)
    
    
    • 如果小程序一次還未發(fā)布, 那么會生成頁面失敗{"errcode":41030,"errmsg":"invalid page hint: [nFp68a09091511]"} 因?yàn)樵損age 還未在線上注冊,此時(shí)直接發(fā)布就好,等提交生產(chǎn)成功后 就好啦。

5. 在<web-view></web-view> 中使用jssdk的api, 無任何效果?

出現(xiàn)這個(gè)問題,首先需要檢查一下情況:

  • 是否在微信小程序公眾平臺配置業(yè)務(wù)域名白名單
  • 是否在 引用的HTML 中引入 jssdk
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>

當(dāng)然,我上面情況都配置了,結(jié)果還是沒有效果,這里出現(xiàn)了一個(gè)情況:

在HTML中,使用了<iframe src="xxx"></iframe>,并在xxx的頁面中引入jssdk, 結(jié)果在調(diào)用api的時(shí)候,提示api方法是存在的,就是沒有效果,為什么呢?

后來發(fā)現(xiàn)因?yàn)椴皇琼攲觲indow 的原因,舉個(gè)栗子:

// 原來調(diào)用的情況  
wx.miniProgram.navigateTo({url: '/path/to/page'})
// 等價(jià)于window.wx.miniProgram.navigateTo({url: '/path/to/page'})

// 因?yàn)檫@里的window是iframe 中的window 所以作用于web-view 的時(shí)候失敗
 // 正確的調(diào)用方式
window.parent.wx.miniProgram.navigateTo({url: '/path/to/page'})
// 當(dāng)然 ,如果iframe多嵌套了幾層,辣么用window.top 是最合適的操作
window.top.wx.miniProgram.navigateTo({url: '/path/to/page'})

最后感謝我自己,給我自己挖了一個(gè)坑??

-----------------未完待續(xù)-------------------

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近一個(gè)多月斷斷續(xù)續(xù)的寫了個(gè)小程序,就記錄下之前遇到過的坑。首先放一個(gè)微信小程序爬坑的一個(gè)查詢網(wǎng)站:http://...
    Zhangzhuocheng閱讀 902評論 0 2
  • 從微信小程序發(fā)布到現(xiàn)在經(jīng)手的小程序也有好幾個(gè)了,開發(fā)過程中多少會遇到一些坑,這里匯總一下開發(fā)中遇到過的坑與小程序開...
    HelloKang閱讀 5,519評論 0 3
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,632評論 1 32
  • 開發(fā)前準(zhǔn)備本文首先假定開發(fā)者已經(jīng)粗略閱讀過微信小程序的開發(fā)文檔,所以注冊小程序的流程就不介紹了。不過需要注意,小程...
    孤酒獨(dú)酌閱讀 2,032評論 0 14
  • 有一位老朋友在故鄉(xiāng)故去了有一百萬顆星在那夜仿佛更亮忽又更暗了一些父親走的時(shí)候留給我一輛穿梭今晨和昨夜的機(jī)車母親走的...
    小者閱讀 310評論 0 8

友情鏈接更多精彩內(nèi)容