如何在没有参数的回调中定义变量

How to define variables in a callback without parameters

在 Puppeteer 的 evaluate 函数中,我可以访问似乎预定义的变量,但仅限于函数范围内:

// Excerpt
page.evaluate(() => {
  alert("Hello world!!");
});

也没有任何参数传递给函数...

而如果它不在 evaluate 函数内,我就无法访问所有变量。更有趣的是evaluate里面的代码和外面的代码没有任何关系

// Excerpt
page.evaluate(() => {
  console.log("Hello world!!");
});

以上代码不会在 Node.js 控制台中打印,而是在 Chromium 浏览器中打印。

这是如何工作的,我也该怎么做?

Puppeteer 使用 Function constructor and Function#toString 包装您的函数,然后在自定义上下文中评估它,如下所示:

let functionText = evaluateFunc.toString();

let newFunc = new Function(`
function alert() {...}

(${functionText})
`);

newFunc();

因此无法访问函数外部的变量、函数等。

如果您想在 evaluate 函数中传递参数,请参阅