首页 > 解决方案 > 在 puppeteer(Nodejs 库)中发送 postMessage

问题描述

我知道如何接收 postMessages ,但我希望将 postMessage 请求发送到站点

只是一种格式

const puppeteer = require('puppeteer');
const yargs = require('yargs');

let command = yargs.argv._[0];

(async() => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();


function sendMessageToContentScriptByPostMessage(data)
{
    window.postMessage({cmd: 'message', data: data}, '*');
}

    await page.goto(command, {waitUntil: 'networkidle0'});

    await browser.close();


})();

所以用户可以这样做,节点 postmessage.js https://www.example.com

标签: javascriptnode.jscross-domainpuppeteerpostmessage

解决方案


您可以使用在浏览器内部page.evaluate运行的东西。然后你可以发送一个postMessage:

await page.evaluate((data) => {
  window.postMessage({cmd: 'message', data: data}, '*');
}, data);

要记住两件事:

  • evaluate浏览器内运行,而所有其他脚本都在 NodeJS 内(您可以考虑远程与本地代码,本地 = NodeJS,远程 = Chrome)
  • 因此,内部的变量evaluate与外部不同。您需要显式传递datatoevaluate以将其移动到浏览器上下文中。

推荐阅读