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再次出现永久性卡死。

阅读 508
1 个回答

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

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

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

2、ArkUI Web.onAlert返回false。