微信開(kāi)發(fā)之疑難雜癥

生成圖片


上一篇文章中介紹了dom-to-imghtml2canvas兩個(gè)插件,今天再介紹下其中隱藏的坑。

dom-to-image 兼容性

Internet Explorer is not (and will not be) supported, as it does not support SVG <foreignObject> tag
Safari is not supported, as it uses a stricter security model on <foreignObject> tag. Suggested workaround is to use toSvg and render on the server.`

簡(jiǎn)單翻譯過(guò)來(lái)就是,不支持IE和Safari瀏覽器,同時(shí)需要注意,在ios設(shè)備上微信使用的內(nèi)置瀏覽器其實(shí)就是Safari。

html2canvas
  • 不支持css3樣式

    • 背景圖替換成img標(biāo)簽
    • word-break: break-all不支持
  • img標(biāo)簽需要加載完畢之后,再開(kāi)始轉(zhuǎn)圖片
    實(shí)際開(kāi)發(fā)中,可能先從接口獲取頭像,需要等加載完畢,再開(kāi)始轉(zhuǎn)圖片,否則頭像不顯示。

  • dom太大,太長(zhǎng)
    ios對(duì)內(nèi)存管理很嚴(yán)格,如果dom太大,在ios設(shè)備會(huì)拋出安全異常錯(cuò)誤。

    解決方案:將dom切割,分塊轉(zhuǎn)成canvas,最后再合并到同一個(gè)canvas上。

圖片格式


關(guān)于圖片格式,最好使用png、jpg、jpeg。

因?yàn)閟vg、base64等在微信端表現(xiàn)不太良好,會(huì)導(dǎo)致以下幾個(gè)功能失效:

 長(zhǎng)按保存圖片失敗
 長(zhǎng)按識(shí)別二維碼失敗
 發(fā)送給朋友失敗

但是前端生成的圖片一般都是base64格式的字符形式。

解決方案:將base64上傳給后臺(tái),獲取返回的url。

圖片模糊


先說(shuō)說(shuō)為什么會(huì)模糊。

將dom轉(zhuǎn)換成canvas,實(shí)質(zhì)是根據(jù)樣式將html用canvas畫(huà)出來(lái),此時(shí)是一個(gè)像素點(diǎn)渲染一個(gè)像素,這在普通屏幕上是清晰的。
但是二倍屏、視網(wǎng)膜屏等是兩個(gè)像素點(diǎn)渲染一個(gè)像素,相當(dāng)于canvas被放大了,就會(huì)變得模糊。

解決方案:
根據(jù)設(shè)備像素比,動(dòng)態(tài)的轉(zhuǎn)換canvas。

生成二維碼


vue-qrcode

  • 需要使用img標(biāo)簽
    tag: 'img'

  • 尺寸
    size: 140
    遇到復(fù)雜的情況,html中包括二維碼圖片,然后將html整體轉(zhuǎn)換成圖片,如果二維碼尺寸偏小,將導(dǎo)致ios生成的圖片,在微信端長(zhǎng)按無(wú)法識(shí)別其中的二維碼。

  • 邊距
    vue-qrcode這個(gè)插件生成的二維碼,超過(guò)一定尺寸就會(huì)產(chǎn)生白色的內(nèi)邊距,很丑,試了padding屬性也沒(méi)有作用。

    解決方案:除了設(shè)置size屬性外,還使用樣式控制二維碼根元素的寬高。

長(zhǎng)按識(shí)別二維碼


長(zhǎng)按識(shí)別二維碼失敗,長(zhǎng)按無(wú)識(shí)別二維碼選項(xiàng)的可能原因:

  • img格式不正確
    base64、svg等格式不支持
  • 二維碼尺寸偏小
  • vue-touch長(zhǎng)按手勢(shì)和微信長(zhǎng)按手勢(shì)沖突

sdk config失敗


首先開(kāi)啟debug模式,查看錯(cuò)誤原因。和后臺(tái)多溝通,看看是否是因?yàn)楹灻徽_導(dǎo)致。

通常都是前端向后端請(qǐng)求,后端返回配置參數(shù),安裝正常情況來(lái)說(shuō),大多數(shù)返回的結(jié)果應(yīng)該是正確的,但也有可能返回的錯(cuò)誤的。

此時(shí)前端可以 暴力破解

具體方案:
給予3次機(jī)會(huì),當(dāng)連續(xù)3次調(diào)用接口后配置都失敗,給予用戶提示,關(guān)閉頁(yè)面,重新進(jìn)入。

授權(quán)失敗


授權(quán)失敗原因就負(fù)責(zé)了,也超出了前端的范圍,盡快找運(yùn)維、后臺(tái)解決吧。
排查步驟:

  • 嘗試點(diǎn)擊該公眾號(hào)的其它菜單,觀察是否能夠進(jìn)入
  • 登錄微信公眾平臺(tái),查看相關(guān)配置,安全域名等

參考

微信公眾平臺(tái)
js-sdk demo
dom-to-image
淺析 js 實(shí)現(xiàn)網(wǎng)頁(yè)截圖的兩種方式
canvas在高倍屏下變模糊的處理辦法

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

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

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