如何使用puppeteer挂钩到powerbi报告加载事件

时间:2019-03-06 13:18:47

标签: powerbi puppeteer

我很高兴地使用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:我知道(并且已经开始工作)将过滤器传递到配置中;但这从美学角度来看还不够好(未设置屏幕上的视觉效果!)

任何帮助/指针-非常感谢

2 个答案:

答案 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);

}