Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

505
Views
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)

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

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()
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!