1. websocket 发送信息问题
在发送信息给服务器时,网上好多代码都将要发送的信息用 JSON.stringify(msg) 转了一下。这里要明白它为什么要转,当你发的是一个对象时,做这个操作是将对象转为字符串;而发送的是一个字符串时,就不能转了,因为再转一下就将是双层的双引号了,服务器收信息将解析不了。
2. websocket 通讯收信息的回调处理
websocket与设备在几个页面中都需要通讯,这样不同页面时,需要定义不同的 发送/接收 设备返回信息的处理方法。有种做法是将这个回调处理写到 getApp().globalData 对象内。在需要处理的 page 中 onShow 方法中重写这相应的方法。参考这篇文章 https://www.xncoding.com/2017/12/15/weixin/ma-websocket.html 。但个人觉得这个还是不太好,准备抽离出一个类,在要单独定义接收响应方法的页面中。
3. 小程序展示 base64图片和H5一样, 如下:
You need to specify correct Content-type, Content-encoding and charset like
data:image/jpeg;charset=utf-8;base64,
according to the syntax of the data URI scheme:
data:[<media type>][;charset=<character set>][;base64],<data>
以上内容参考自 https://stackoverflow.com/a/8499679/7624626, 需要修改的是你要展示的图片文件类型。
4. websocket 服务器使用base64发送图片给小程序时,返回为ArrayBuffer类型,将其转为base64 string 使用下面方法:
function _arrayBufferToBase64( buffer ) {
var binary = '';
var bytes = new Uint8Array( buffer );
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode( bytes[ i ] );
}
return window.btoa( binary );
}
方法来自stackoverflow: https://stackoverflow.com/a/9458996。 简书的这个代码引用功能真的太low了,渣渣,跟我写的流水账一样。
5. 上面还有一个问题, 小程序并不支持 btoa 这种方法,需要你引入一个polyfill, 项目地址:https://github.com/davidchambers/Base64.js