问题现象
页面展示地图服务自定义信息窗时(如下图的点击店铺显示自定义图标),返回上一页面,产生崩溃。

背景知识
- Marker:地图服务中的标记,继承BaseOverlay。在调用map.MapComponentController类的addMarker方法时会返回该类型的实例。
- getSnippet:返回信息窗的子标题。
问题定位
- 查看崩溃日志,报错“Unexpected Text in JSON: Empty Text”。查看具体报错的代码行内容为let XXX = JSON.parse(data) as object,判断是data为空导致崩溃。
- 查看工程代码中data的来源为marker?.getSnippet(),即关闭页面时marker?.getSnippet()的值为空。
- 确认在页面关闭时,地图服务会清除Marker,导致marker?.getSnippet()为空。
分析结论
使用地图服务的自定义信息窗能力时,使用marker?.getSnippet()获取信息窗标题,在页面退出时,地图服务会清除掉页面所有的覆盖物,包括Marker,此时marker?.getSnippet()获取的值为空字符串,使用JSON.parse转换marker?.getSnippet()获取的空字符串,会产生崩溃。
修改建议
使用try/catch方式对JSON.parse(data)进行异常防护,避免data为空值时产生崩溃。