• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

388
Vistas
Titiritero de Node.js: cómo recibir la respuesta XHR de iframe (con el trabajador web JS)

Tengo una página que se comunica con un servidor cada 10 segundos a través de XHR dentro de un iframe. Me gustaría monitorear las respuestas (texto/UTF-8 sin formato).

Frente a la lista de DevTools Network, parece que Puppeteer no "detecta" respuestas XHR desde dentro de iframes, con su procedimiento de página normal:

 page.on('response', async (response) => {}

Cuando se conoce el ID del iframe, ¿hay alguna forma de recibir las respuestas XHR del iframe? (con un trabajador web JS haciendo las solicitudes XHR)

almost 3 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

He escrito este ejemplo que muestra que las solicitudes se captured de hecho desde los marcos internos de su page . Debe tener cuidado, las solicitudes que fallan en realidad no activarán page.on('response') pero activarán page.on('requestfailed') .

¡También asegúrese de llamar await page.setRequestInterception(true) antes de agregar cualquier controlador relacionado con la solicitud a su página!

Aquí hay un ejemplo de trabajo: (solo activará requestFailed debido a restricciones de origen cruzado).

 var puppeteer = require('puppeteer') function simulateRequest() { function doXmlHTTPRequest() { function reqListener() { console.log('xml done.') console.log(this.responseText); } var oReq = new XMLHttpRequest(); oReq.addEventListener("load", reqListener); oReq.open("GET", "https://www.google.com"); oReq.send(); } setInterval(doXmlHTTPRequest, 2 * 1000) } // Easiest way to get an Iframe is by its name. const findFrame = (frames, name) => { return frames.find(f => f.name() === name) } const main = async() => { const browser = await puppeteer.launch({ headless: false }); const page = await browser.newPage() // have a page with only an iframe. const pageContent = '<iframe id="myFrame" name="frameName">' await page.setContent(pageContent) // important call! await page.setRequestInterception(true) page.on('response', async(res) => { console.log('Page response received..', ) }) page.on('requestfailed', () => { console.log('requestfailed recieved') }) page.on('request', async(res) => { console.log('page request received..', ) // make sure to continue request. res.continue() }) // find the iframe! const targetFrame = findFrame(page.frames(), 'frameName') // set some test content.. await targetFrame.setContent('<h1>hello</h1>') // add a script to iframe which simulates requests! await targetFrame.addScriptTag({ // execute the function immediatly.. content: `(${simulateRequest.toString()})()` }) } main()
almost 3 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda