Closed VictorSu000 closed 1 week ago
无报错
播放一首新的歌曲时报错:SyntaxError: JSON Parse error: Unexpected character: o, js engine: hermes
具体出现在 src\utils\nativeModules\userApi.ts onScriptAction 函数,if (event.data) event.data = JSON.parse(event.data as string) 处。在这个代码前打印event,先后出现了以下log。
src\utils\nativeModules\userApi.ts
onScriptAction
if (event.data) event.data = JSON.parse(event.data as string)
{"action": "response", "data": "{\"requestKey\":\"request__9771679874510859\",\"status\":false,\"errorMessage\":\"Fail\"}"} {"action": "response", "data": {"errorMessage": "Fail", "requestKey": "request__9771679874510859", "status": false}} ERROR SyntaxError: JSON Parse error: Unexpected character: o, js engine: hermes {"action": "request", "data": "{\"requestKey\":\"0.03702192998451315\",\"url\":\"http://******\",\"options\":{\"method\":\"GET\",\"headers\":{\"User-Agent\":\"lx-music/mobile\",\"ver\":\"2.0.0\",\"source-ver\":\"1\",\"tag\":\"5b0a20223238323433353439222c0a20223132386b220a5d\"},\"binary\":false}}"} {"action": "request", "data": {"options": {"binary": false, "headers": [Object], "method": "GET"}, "requestKey": "0.03702192998451315", "url": "http://*****"}} ERROR SyntaxError: JSON Parse error: Unexpected character: o, js engine: hermes
JSON.parse 报错是因为 event.data 已经是object了并不是string。而且出现这个报错时,前一条event内容和这一条event很类似。
JSON.parse
event.data
报错场景:
我针对个人特殊需求进行过部分功能的小修改,但应该没动过native modules消息传递这块。如果其他人没法复现的话那我就不管了。我自己补了一个判断,仅当event.data为字符串时才进行JSON.parse
master分支
No response
模拟器 Pixel_3a _API_34_extension_level_7_x86_64
理论上 data 永远为 string:
data
string
https://github.com/lyswhut/lx-music-mobile/blob/c70311bfb305b7e2e107ff28a91caf9f2171b3a8/android/app/src/main/java/cn/toside/music/mobile/userApi/JsHandler.java#L41-L48
你这个问题我从来没遇到,若能从仓库克隆的代码重现,可以看看安卓 logcat 的日志输出
未能复现,可能是我自己的问题,但我搜自己的代码并没有任何对event的调用或处理,奇怪了……我先close吧,谢谢作者啦~
解决方案检查
预期行为
无报错
实际行为
播放一首新的歌曲时报错:SyntaxError: JSON Parse error: Unexpected character: o, js engine: hermes
具体出现在
src\utils\nativeModules\userApi.ts
onScriptAction
函数,if (event.data) event.data = JSON.parse(event.data as string)
处。在这个代码前打印event,先后出现了以下log。JSON.parse
报错是因为event.data
已经是object了并不是string。而且出现这个报错时,前一条event内容和这一条event很类似。报错场景:
我针对个人特殊需求进行过部分功能的小修改,但应该没动过native modules消息传递这块。如果其他人没法复现的话那我就不管了。我自己补了一个判断,仅当
event.data
为字符串时才进行JSON.parse
Lx Music 版本
master分支
最后正常的版本
No response
操作系统版本
模拟器 Pixel_3a _API_34_extension_level_7_x86_64
附加信息
No response