我很高兴地使用pupeteer / chromium嵌入了power bi报告,然后将其另存为屏幕截图/ pdf。但是,最新的要求要求我能够挂钩报表的onloaded事件。
我有以下代码片段,这是我用来关联事件的模板;报告正在嵌入,但是'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:我知道(并且已经开始工作)将过滤器传递到配置中;但这从美学角度来看还不够好(未设置屏幕上的视觉效果!)
任何帮助/指针-非常感谢
答案 0 :(得分:0)
我们一直将过滤器传递到嵌入报告的配置中。 简短。
答案 1 :(得分:0)
要回答这个问题,您可以使用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);
}