powerbi - 如何使用 puppeteer 挂钩到 powerbi 报告加载事件
问题描述
我很高兴地使用 pupeteer/chromium 嵌入了一个 power bi 报告,然后将其保存为屏幕截图/pdf。但是,最新的要求要求我能够挂钩报告的加载事件。
我有以下代码片段,这是我用来连接事件的模板;报告正在嵌入,但“report.on”事件没有触发,(实际上我正在尝试设置一些视觉效果和其他内容,而不仅仅是日志文本。)
await page.evaluate((configdata) => {
const models = window['powerbi-client'].models;
const config = {
...
};
const report = powerbi.embed(reportContainer, config)
report.on('loaded', function () {
console.log('loaded report')
});
},
configdata);
我查看了“exposeFunction()”,但无法将其与此事件(或其他事件)挂钩。
有人可以告诉我我缺少什么吗?必须有办法做到这一点,但我错过了如何绑定报告对象(从 IFrame 中实例化,到使用 puppeteer 函数的事件。但是,JS/Node 不是我的主要学科,地狱它甚至不是我的第二个!
PS:我知道(并且已经开始工作)将过滤器传递给配置;但从美学的角度来看,这还不够好(屏幕上的视觉效果没有设置!)
任何帮助/指针 - 非常感谢
解决方案
要回答这个问题,您可以使用 page.evaluate 并创建一个 Promise,该 Promise 将在触发嵌入加载事件时解决。然后你可以等待你的 loadEmbed 函数:
async function loadEmbed(page, config) {
return page.evaluate(async (config) => {
await new Promise((resolve, reject) => {
try {
var embedContainer = $('#embedContainer')[0];
var embed = powerbi.embed(embedContainer, config);
embed.off("loaded");
embed.on("loaded", function () {
resolve(true);
});
} catch (err) {
resolve(false);
}
});
}, config);
}
推荐阅读
- python - 在函数中关闭 tkinter 窗口后如何执行命令?
- android - 从 OneSignal 推送通知启动对话框
- apache - Htaccess - 如何在 url 上的最后一个斜杠后删除没有查询字符串的路径
- java - 如何从 GPS 坐标中获取道路名称或街道名称?
- rest - 尝试写入页 blob 失败并显示“错误:HTTP 标头之一的值格式不正确
- linux - SQL Developer 无法在 Linux Fedora 29 上启动
- c# - 如果用户不在 Asp.Net C# 中的 VPN 上,则访问外部服务器站点
- javascript - 如何在 React.js 中获取另一个组件的元素?
- php - 如何在 Ubuntu 上使用 Valet 进行 php-debug 扩展 - 502 Bad Gateway
- neovim - 用于预编译 nvim 二进制文件的 $VIMRUNTIME 和 $VIM 变量