发现调用wx.connectSocket根本没有执行到连接。
具体调试细节如下,请问是什么原因,是什么地方没有初始化吗?
重现:
直接在打飞机小游戏中,new Main()后面,加入wx.connectSocket 就可以发现。
调试下去在asdebug.js 内createSocketTask 函数:
try {
let e = window.WebSocket; // <------------ 这里window里面没有WebSocket
if (a.asLoader) { // <------------ 这里a里面没有asLoader
const t = a.asLoader.getInstanceWindowSync();
if (!t)
return void u({
errMsg: "connectSocket:fail runtime invalidated"
});
e = t.__global.WebSocket
}
E = new e(h,t.protocols || []) // <------------ 这里e = undefined,抛出异常
} catch (e) {
if (k)
return;
o.emit("triggerOnEvent", "onSocketTaskStateChange", { // 到了这里
socketTaskId: w,
state: "error",
errMsg: "未完成的操作"
}),
delete c[w]
}
if (!E)
return; // <------------ 这里直接return
也允许不安全的域名,TLS,证书了。
代码是类似这样的,所有的handler都没有收到信息
let socketTask = wx.connectSocket({ url: 'wss://xxxxx.com:443' , // <-------- 已经加入了白名单,并且开发工具不安全选项也已经开了 success: function(e) { console.log("???") // <----- 这里有执行到 } }) console.log(socketTask.readyState); // <----- 直接就是 3 CLOSED console.log("try login"); socketTask.onMessage(function() { console.log("ddd"); }) socketTask.onOpen(function() { console.log("aaa"); }) socketTask.onError(function() { console.log("bbb"); }) socketTask.onClose(function() { console.log("ccc"); }) console.log(socketTask.readyState);