Ionic MenuController iOS端this.menuInnerEl.offsetWidth报错求助
问题现象
- 触发场景:Ionic项目中使用
MenuController能力时,无固定路径偶发抛出TypeError: undefined is not an object (evaluating 'this.menuInnerEl.offsetWidth')运行时错误 - 异常影响:错误触发后会直接造成iOS端应用完全冻结,同版本代码在Android端全流程运行无任何异常表现
- 项目基础版本配置:
Ionic: Ionic CLI : 6.4.0 (/usr/local/lib/node_modules/@ionic/cli) Ionic Framework : @ionic/angular 5.5.2 @angular-devkit/build-angular : 0.1100.7 @angular-devkit/schematics : 10.2.1 @angular/cli : 10.2.1 @ionic/angular-toolkit : 3.0.0
根因说明
- 报错位置位于Ionic Framework内部的菜单宽度计算逻辑,当代码尝试读取
this.menuInnerEl.offsetWidth时,对应的菜单内部DOM元素还未完成挂载 - iOS WKWebView的DOM渲染、布局计算时序和Android WebView存在天然差异,相同操作节奏下,iOS端更容易出现“逻辑执行早于DOM渲染完成”的时序错位,这是该问题仅在iOS端复现的核心原因
可落地修复方案
- 调用
MenuController的打开、关闭、切换等方法前,先等待当前页面所有视图完成初始化渲染,再执行菜单操作,避免过早触发逻辑 - 封装自定义菜单调用逻辑时,增加
menuInnerEl对应的DOM元素非空判断,若检测到元素未挂载,通过setTimeout延迟100ms后重试对应操作,规避时序问题 - 版本层面可将
@ionic/angular从当前的5.5.2版本升级到5.6.0及以上的5.x兼容版本,该版本官方已经针对iOS端菜单的DOM读取时序问题做过专项修复
内容的提问来源于stack exchange,提问作者sudalak
相关产品推荐
相关产品推荐

