Javascript 如何将现有对象传递到Puppeter的page.evaluate?

Javascript 如何将现有对象传递到Puppeter的page.evaluate?,javascript,puppeteer,Javascript,Puppeteer,我在node中使用了一个很好的日志库,它使用一个简单的logger.debugMessage方法编写日志消息 我不知道如何将logger对象传递到page.evaluate以便在其中使用它 我研究了page.exposeFunction,但这似乎是针对内联创建的匿名函数。我想传递已实例化的现有记录器对象 我还尝试将整个内容添加到page对象,即page.logger=logger,但没有成功 我能做什么?您可以尝试一些变体 如果logger.debug不需要logger作为其目标,则这可能就足够

我在node中使用了一个很好的日志库,它使用一个简单的logger.debugMessage方法编写日志消息

我不知道如何将logger对象传递到page.evaluate以便在其中使用它

我研究了page.exposeFunction,但这似乎是针对内联创建的匿名函数。我想传递已实例化的现有记录器对象

我还尝试将整个内容添加到page对象,即page.logger=logger,但没有成功


我能做什么?

您可以尝试一些变体

如果logger.debug不需要logger作为其目标,则这可能就足够了: 等待page.exposeFunction'loggerDebug',logger.debug; 如果logger.debug需要logger作为其目标,这可能就足够了: 您可以尝试使用包装器: 等待page.exposeFunction'loggerDebug',msg=>{logger.debugmsg;}; 所有变体均可通过以下方式使用:

等待页面。evaluateasync=>{ // ... window.loggerDebugMessage; // ... };
您可以尝试一些变体

如果logger.debug不需要logger作为其目标,则这可能就足够了: 等待page.exposeFunction'loggerDebug',logger.debug; 如果logger.debug需要logger作为其目标,这可能就足够了: 您可以尝试使用包装器: 等待page.exposeFunction'loggerDebug',msg=>{logger.debugmsg;}; 所有变体均可通过以下方式使用:

等待页面。evaluateasync=>{ // ... window.loggerDebugMessage; // ... };
我想这是一个好主意。您正试图从浏览器中调用记录器,您不想将记录器传递给它,对吗?嗨,托马斯,是的,您可能是对的。目标是,我可以从代码中的任何位置将日志消息写入node.js,包括page.evaluate函数内部,这些函数可能很长,并且可以执行我想要记录的许多提升操作。然后,您必须使用exposeFunction。查看@vsemozhetbyt答案。我想这是一个很好的回答。您正试图从浏览器中调用记录器,您不想将记录器传递给它,对吗?嗨,托马斯,是的,您可能是对的。目标是,我可以从代码中的任何位置将日志消息写入node.js,包括page.evaluate函数内部,这些函数可能很长,并且可以执行我想要记录的许多提升操作。然后,您必须使用exposeFunction。查看@vsemozhetbyt答案。谢谢!!我自己永远也不会明白这一点——但你的例子很好,而且2非常有效。今天学到了一些新东西…谢谢!您可以在这里阅读更多关于方法提取的内容:陷阱:提取方法时丢失此信息谢谢!!我自己永远也不会明白这一点——但你的例子很好,而且2非常有效。今天学到了一些新东西…谢谢!您可以在这里阅读更多关于方法提取的内容:陷阱:提取方法时会丢失它
await page.exposeFunction('loggerDebug', logger.debug.bind(logger));