HarmonyOS H5页面永久性卡死,重启应用才能恢复?

1、ArkUI中实现Web组件onAlert回调,通过AlertDialog展示弹框。

AlertDialog.show({
  title: '',
  message,
  primaryButton: showCancelButton ? {
    value: '取消',
    action: () => event.result.handleCancel(),
  } : undefined,
  secondaryButton: {
    value: '确定',
    action: () => event.result.handleConfirm(),
  },
});

H5调用alert('1111')展示弹框后,用户触摸遮罩区域取消弹框,在未触发event.result.handleCancel()的情况下,H5 页面出现永久性卡死,退出当前页面新开WebView也无法恢复,只能重启应用。

2、将上述弹框代码改成:

AlertDialog.show({
  title: '',
  message,
  primaryButton: showCancelButton ? {
    value: '取消',
    action: () => event.result.handleCancel(),
  } : undefined,
  secondaryButton: {
    value: '确定',
    action: () => event.result.handleConfirm(),
  },
  cancel: () => event.result.handleCancel(),
  autoCancel: false,
});

常规情况下可以正常展示弹框,且关闭时能触发handleCancel/handleConfirm,H5页面不会卡死。但在前端调用alert的同时申请系统权限,系统权限弹框会导致AlertDialog无法正常展示,更无法触发handleCancel/handleConfirm,H5再次出现永久性卡死。

阅读 504
1 个回答

这两种场景中H5卡死均因为未触发handleCancel或handleConfirm,导致web一直没有接收到信号,一直阻塞。这属于当前规格。

Web alert满足以下条件可除阻塞:

1、ArkUI Web.onAlert中触发event.result.handleCancel或event.result.handleConfirm。

2、ArkUI Web.onAlert返回false。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进