如何向page.on('dialog')回调传递额外变量并获取函数返回结果
解决
page.on('dialog') 传自定义参数及获取执行结果的方案 1. 传递自定义变量
直接利用JS闭包特性,回调函数可以直接访问外部作用域的param变量,不需要给page.on传递额外参数,你示例中写的第三个参数p是无效的,Puppeteer事件注册接口不支持该用法。
2. 获取回调执行结果
由于dialog事件是异步触发的,注册事件后同步打印res时回调还未执行,无法拿到结果。你可以将事件逻辑封装为Promise,等回调执行完成后返回结果。
可直接运行的正确示例代码:
// 定义你要传递的自定义参数 const param = '你需要匹配的弹窗提示文本' // 封装Promise等待弹窗触发后返回结果 const waitDialogResult = () => new Promise((resolve) => { // 定义事件处理函数 const dialogHandler = async (dialog) => { console.log('get additional variables:', param) const isSuccess = dialog.message() === param await dialog.accept() // 处理完成后移除监听,避免重复触发 page.off('dialog', dialogHandler) resolve({ isSuccess }) } // 注册弹窗监听 page.on('dialog', dialogHandler) }) // 后续调用(注意要放在async函数中才能使用await语法) const res = await waitDialogResult() console.log('get return:', res)
补充注意点
- 如果你的业务场景会触发多次弹窗,不需要销毁监听,可以把结果存在外部定义的公共对象中,也可以自己实例化
EventEmitter抛结果做消费 - 原示例中
console('xxx')写法错误,要补全为console.log('xxx')才不会报错
内容的提问来源于stack exchange,提问作者zc g
相关产品推荐
相关产品推荐

