javascript - Chrome DevTools 协议:如何取消订阅 Page.javascriptDialogOpening 事件
问题描述
我正在使用 Chrome DevTools 协议 API 函数来监听javascriptDialogOpening
事件。下面是代码。
async navigate(url: URL, target: any) {
const { Page } = target.connection;
// Enable the required protocol features
await Page.enable();
// Add a listener and handler for JavaScript dialogs
Page.javascriptDialogOpening(async(event: Protocol.Page.JavascriptDialogOpeningEvent) => {
// Respond with a confirmation to all dialogs
const dialogResponse: Protocol.Page.HandleJavaScriptDialogRequest = {
'accept': true
};
Page.handleJavaScriptDialog(dialogResponse);
});
}
我收到一个错误:MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。增加了11Page.javascriptDialogOpening
位听众。使用emitter.setMaxListeners() 增加限制
解决方案
通过将javascriptDialogOpening
事件注册放入navigate
处理程序中,您将一遍又一遍地添加处理程序。因为每次发生导航事件时,您都在重新添加此事件处理程序。
您真正想要的是将javascriptDialogOpening
事件注册放入您的初始化代码中。如果您这样做,它将只注册一次,您将不再遇到此问题。
CDP({'host': host, 'port': port}, (client) => {
// ...
Page.javascriptDialogOpening((params) => {
Page.handleJavaScriptDialog({'accept': true});
});
推荐阅读
- regex - 用于在 MATLAB 中捕获科学数字的 RegEx
- c# - 如何将新数据成员添加到我的自定义复选框列表?
- sql-server - 如何让自动迁移与 SQL Server 一起工作
- javascript - 我如何显示我的登录用户下的他/她的订单列表?
- javascript - 如何修复 vue js 或 javascript 比较逻辑错误
- node.js - 我根本无法启动管理 SDK
- javascript - 如何将使用 id 的函数替换为类名
- android - react-native - 如何检测何时按下主页按钮?
- image - React Native Animated.event onScroll 从左上角而不是中心缩放图像
- javascript - str.replace() 方法没有按预期工作