Пользовательское событие не запускается в Puppeteer - PullRequest
0 голосов
/ 01 мая 2020

Я создаю инструмент для экспорта HTML ввода в PDF. Для разбивки на страницы я использую Paged. js polyfill . Этот polyfill запускается после загрузки содержимого DOM, и мне нужно дождаться его окончания sh перед генерацией PDF. Для этого я определил пользовательское событие во входном файле HTML, которое выглядит следующим образом:

<script>
    window.PagedConfig = {
        after: (flow) => {
            console.log(`After polyfill | total pages: ${flow.total} | performance: ${flow.performance} `);
            document.dispatchEvent(new CustomEvent('polyfillFinished'));
        }
    };
</script>

При открытии файла HTML в браузере это событие срабатывает очень хорошо, но когда я жду триггер события, использующий Puppeteer's evaluateOnNewDocument, работает непрерывно почти сразу до того, как событие сработало. Код Puppeteer основан на примере пользовательского события и выглядит следующим образом:

try {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    page.on("console", (msg) => console.log("Page log:", msg.text()));

    // Define a window.onCustomEvent function on the page.
    await page.exposeFunction("onCustomEvent", (e) => {
        console.log(`${e.type} fired`, e.detail || "");
    });

    /**
     * Attach an event listener to page to capture a custom event on page load/navigation.
     * @param {string} type Event name.
     * @return {!Promise}
     */
    function listenFor(type) {
        return page.evaluateOnNewDocument((type) => {
            document.addEventListener(type, (e) => {
                window.onCustomEvent({ type, detail: e.detail });
            });
        }, type);
    }

    await page.goto(options.input);

    await listenFor("polyfillFinished"); // Listen for "polyfillFinished" custom event on page load.

    /* ... Generate PDF ... */

} catch (err) {
    console.error("An error occurred while generating output: ", err);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...