javascript - 如何在没有参数的回调中定义变量
问题描述
在 Puppeteer 的evaluate
函数中,我可以访问似乎是预定义的变量,但仅限于函数范围内:
// Excerpt
page.evaluate(() => {
alert("Hello world!!");
});
也没有任何参数传递给函数......
而如果它不在evaluate
函数内部,我就无法访问所有变量。更有趣的是,里面evaluate
的代码和外面的代码没有任何关系。
// Excerpt
page.evaluate(() => {
console.log("Hello world!!");
});
上面的代码不会在 Node.js 控制台中打印,而是在 Chromium 浏览器中打印。
这是如何工作的,我该怎么做?
解决方案
Puppeteer 使用Function
构造函数包装您的函数Function#toString
,然后在自定义上下文中对其进行评估,如下所示:
let functionText = evaluateFunc.toString();
let newFunc = new Function(`
function alert() {...}
(${functionText})
`);
newFunc();
因此,函数之外的变量、函数等是不可访问的。
如果您想在evaluate
函数内部传递参数,请参阅如何将变量传递给评估函数?
推荐阅读
- amazon-eks - 如何从 EKS 集群连接到 MSK 集群
- python - 如何使用 python 将 JSON 文件解析为 jsonlines 以进行 GPT-3 微调
- r - 为什么 R 库没有加载到 app.powerbi.com 中?
- f# - PlayWright 代码 - 将异步 C# 代码转换为 F#
- html - 如何在不被挤压的情况下控制容器内盒子的大小?
- python - 从一个日期列创建开始和结束日期功能
- mongodb - 查找和删除文档中的重复键
- python - chart.js 中的散点图
- python - 使用 skimage 和 napari 将 blob_dog 中的 blob 添加到 3D 图像堆栈
- generative-adversarial-network - GAN 训练时图像质量突然下降