首页 > 解决方案 > 如何在没有参数的回调中定义变量

问题描述

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

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

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

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

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

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

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

标签: javascriptnode.jspuppeteerpredefined-variables

解决方案


Puppeteer 使用Function构造函数包装您的函数Function#toString,然后在自定义上下文中对其进行评估,如下所示:

let functionText = evaluateFunc.toString();

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

(${functionText})
`);

newFunc();

因此,函数之外的变量、函数等是不可访问的。

如果您想在evaluate函数内部传递参数,请参阅如何将变量传递给评估函数?


推荐阅读