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再次出现永久性卡死。
这两种场景中H5卡死均因为未触发handleCancel或handleConfirm,导致web一直没有接收到信号,一直阻塞。这属于当前规格。
Web alert满足以下条件可除阻塞:
1、ArkUI Web.onAlert中触发event.result.handleCancel或event.result.handleConfirm。
2、ArkUI Web.onAlert返回false。