- PC小程序WebSocket发送的是否为二进制数据的判断标准与其他平台不一致
微信小程序的WebSocket判断发送数据是否为二进制应该是通过data字段是不是一个ArrayBuffer来判定的,比如下一段应该被判定为发送二进制数据: var socket = wx.connectSocket({ url: 'ws://xxx/' }); socket.onOpen(() => { socket.send({ data: Uint8Array.from([8,31,18,5,2,3]).buffer }) }) 然而在PC客户端真机调试时,通过抓包可以发现发送的websocket数据包的opcode表明它是一个text数据包。 var socket = wx.connectSocket({ url: 'ws://xxx/' }); socket.onOpen(() => { socket.send({ data: Uint8Array.from([8,31,18,5,2,3,128]).buffer }) }) 只有把这段buffer中加上一个大于等于128的字节,才能被微信小程序正确识别为二进制数据正常发送。
2021-08-05 - 启用插件时,JavaScript内置对象中的方法不符合ECMAScript标准
当添加插件后,微信小程序基础库会对JS引擎内置的一些对象启用保护,不允许用户定义脚本修改或删除内置对象方法。但这样的保护代码中有一些不符合ECMAScript语言环境规范之处:对一些内置的Function Object方法比如“Reflect.apply”、“Function.prototype.apply”等,返回的属性不是一个data property而是使用了getter/setter定义的accessor property,这导致了一些很流行的基础库无法正确被加载(比如npm上的util库、es-abstract库)。 相关Github Issue:https://github.com/ljharb/get-intrinsic/issues/5 其中库作者也同时是TC39成员的ljharb建议微信小程序基础库使用SES-shim(https://github.com/Agoric/SES-shim)库,而不是自己重新实现安全的运行环境。
2020-11-05