<webview>:已对此 "dialog" 事件采取行动
<webview>: An action has already been taken for this "dialog" event
我需要在 webview 中显示网页并进行某些导航。由于 webview 不允许确认对话框通过,我想在 webview 中监听对话框事件,然后传递我自己的自定义对话框,让用户操作成为将要执行的操作。
监听事件的 webview 很简单:
webview.addEventListener('dialog', this.onDialogOpen);
然后我用上述方法打开对话框:
private onDialogOpen (e: any): void {
this.dialogOn = true;
this.dialogEvent = e;
}
现在我想要的是用户与我的对话框交互并将其操作传递给此 dialogEvent,如下所示:
<button onclick="onDialogAction()">OK</button>
和运行脚本:
public onDialogAction() {
this.dialogEvent.dialog.ok();
}
但是此时我得到了标题中的错误:
webview: An action has already been taken for this "dialog" event.
据我了解,由于某种原因,DialogEvent 在一段时间后会变为 'outdated'。如果我在 onDialogOpen 中说 'this.dialogEvent.dialog.ok();' 它有效。如果我从 onDialogOpen 调用它,我也可以从任何其他方法调用 'this.dialogEvent.dialog.ok();'。但是,如果我说,在那个 onDialogOpen 中设置超时,它会再次停止工作。
造成这种情况的原因是什么?解决这个问题的正确方法是什么?
对于通过搜索遇到此问题的任何人来说,解决方案都很简单:
只需添加
this.dialogEvent.preventDefault();
onDialogOpen() 可以解决问题。问题是任何对话框事件的默认操作都是取消,并且在加载 DOM 时由于某种原因被触发。但是显然可以使用 preventDefault() 阻止任何对话框事件进入默认状态。
我需要在 webview 中显示网页并进行某些导航。由于 webview 不允许确认对话框通过,我想在 webview 中监听对话框事件,然后传递我自己的自定义对话框,让用户操作成为将要执行的操作。
监听事件的 webview 很简单:
webview.addEventListener('dialog', this.onDialogOpen);
然后我用上述方法打开对话框:
private onDialogOpen (e: any): void {
this.dialogOn = true;
this.dialogEvent = e;
}
现在我想要的是用户与我的对话框交互并将其操作传递给此 dialogEvent,如下所示:
<button onclick="onDialogAction()">OK</button>
和运行脚本:
public onDialogAction() {
this.dialogEvent.dialog.ok();
}
但是此时我得到了标题中的错误:
webview: An action has already been taken for this "dialog" event.
据我了解,由于某种原因,DialogEvent 在一段时间后会变为 'outdated'。如果我在 onDialogOpen 中说 'this.dialogEvent.dialog.ok();' 它有效。如果我从 onDialogOpen 调用它,我也可以从任何其他方法调用 'this.dialogEvent.dialog.ok();'。但是,如果我说,在那个 onDialogOpen 中设置超时,它会再次停止工作。
造成这种情况的原因是什么?解决这个问题的正确方法是什么?
对于通过搜索遇到此问题的任何人来说,解决方案都很简单:
只需添加
this.dialogEvent.preventDefault();
onDialogOpen() 可以解决问题。问题是任何对话框事件的默认操作都是取消,并且在加载 DOM 时由于某种原因被触发。但是显然可以使用 preventDefault() 阻止任何对话框事件进入默认状态。