Существует небольшая разница между назначением функции и передачей строки для функции evaluateHandle
(и evaluate
).
Если вы передадите функцию, функция будет вызываться внутри страницы.Если вы передадите строку, строка будет выполнена в контексте страницы.Это означает, что эти две строки делают разные вещи:
await bgPage.evaluate(() => console.log("test"););
await bgPage.evaluate('() => console.log("test");');
Первая строка будет выполнять функцию (и запускать console.log
) внутри страницы.Однако вторая строка будет только объявлять функцию, а не вызывать ее.Поэтому, если мы передадим строку, нам нужно будет выполнить одно из следующих действий:
await bgPage.evaluate('console.log("test")'); // directly run console.log
await bgPage.evaluate('(() => console.log("test"))()'); // execute the function
Исправление вашего кода
Возвращаясь к вашему коду, это означает, что вы либоВы можете напрямую вызвать window.myfn()
или передать аргумент как функцию:
await bgPage.evaluateHandle('window.myfn()'); // directly call the function
await bgPage.evaluateHandle(() => window.myfn()); // or pass as a function and not as string