didi / Hummer

一套移动端高性能高可用的动态化跨端开发框架
https://hummer.didi.cn/
Apache License 2.0
1.31k stars 178 forks source link

WebSocket.onopen 方法在 iOS 不生效 #419

Open ddiu8081 opened 1 year ago

ddiu8081 commented 1 year ago

描述

前端参考 Hummer Websocket 文档示例代码,建立 Websocket 连接成功,send 方法可用,但 onOpen 方法始终无法收到回调。

Hummer version:

master branch

复现步骤

  1. 按样例代码连接 WS 服务器
  2. onopen 方法无法触发

预期结果

正常打印出 WebSocket onOpen 信息。

样例代码、屏幕截图或者仓库链接

const ws = new WebSocket('ws://x.x.x.x:8000');
ws.onopen = () => {
    console.log('WebSocket onOpen'); 
}
ddiu8081 commented 1 year ago

调试 iOS Hummer 代码发现,(void)webSocketDidOpen:(SRWebSocket *)webSocket 方法中只是执行了连接本身的一些操作,并没有去调用 self.onOpen

ScreenShot 2023-02-14 at 17 58 14

调试加上如下代码可解决:

self.onOpen ? self.onOpen(@[@{}]) : nil;