近期做一個PC端微信掃碼登入的需求,微信掃碼有兩種方式,一種是新開一個二維碼頁面,另一種是內嵌入產品網頁。本次以內嵌二維碼為例,具體怎樣在頁面中顯示一個登陸二維碼,文檔說的很清楚,就不贅述了。
#當一切準備妥當之後,網頁上的二維碼初始預設是這個樣子。
特別大不說(預設二維碼大小280x280),還有微信登入的title,下方也有掃碼登入的提示。
幸運的是,微信留了一個api給我們自訂樣式的機會,在之前實例化一個二維碼的時候,實例物件中href屬性,允許設定樣式。
<span style="font-size: 16px;"> var obj = new WxLogin({<br> id:"login_container", <br> appid: "", <br> scope: "", <br> redirect_uri: "",<br> state: "",<br> style: "",<br> href: "../qrcode.css"//就是这个属性<br> });<br></span>
很不幸的是,在href中傳入樣式檔案的位址,會報錯。貌似微信為了安全考慮,只允許存取https的資源。於是現在採用第二種解決方法data-url。
#寫一個nodejs,腳本將剛才的css資源轉換為data-url。具體程式碼實作為:
<span style="font-size: 16px;">var fs = require('fs');<br><br>// function to encode file data to base64 encoded string<br>function base64_encode(file) {<br> // read binary data<br> var bitmap = fs.readFileSync(file);<br> // convert binary data to base64 encoded string<br> return 'data:text/css;base64,'+new Buffer(bitmap).toString('base64');<br>}<br><br>console.log(base64_encode('./qrcode.css'))<br></span>
執行node腳本,複製列印出來的data-url,然後賦值給剛才的href。
<span style="font-size: 16px;"> var obj = new WxLogin({<br> id:"login_container", <br> appid: "", <br> scope: "", <br> redirect_uri: "",<br> state: "",<br> style: "",<br> href:"data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7d2lkdGg6IDIwMHB4O30NCi5pbXBvd2VyQm94IC50aXRsZSB7ZGlzcGxheTogbm9uZTt9DQouaW1wb3dlckJveCAuaW5mbyB7d2lkdGg6IDIwMHB4O30NCi5zdGF0dXNfaWNvbiB7ZGlzcGxheTpub25lf<br>Q0KLmltcG93ZXJCb3ggLnN0YXR1cyB7dGV4dC1hbGlnbjogY2VudGVyO30="//data-url<br> });<br></span>
注意這裡的MIME類型,一定要回傳text/css。
自訂二維碼:
相關教學:
以上是自訂微信登入掃碼樣式解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!