如何在没有参数的回调中定义变量
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
函数中传递参数,请参阅
在 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
函数中传递参数,请参阅