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

131
Views
Encuentra la etiqueta <video> en la ventana recién abierta en Javascript

Quiero recorrer una lista de enlaces y abrir cada uno de ellos en una nueva ventana y obtener la etiqueta en cada uno de ellos.

Hasta ahora he logrado esto:

 for(var i = 0; i < links.length; i++) { console.log(links[i]); var openedWindow = window.open(links[i], '_blank').focus(); videoList.push(openedWindow.document.querySelectorAll("div video")); //Add the video links in the newly opened video openedWindow.close(); }

videoList es una variable global

 const videoList = [];

El error que recibo cada vez que intento ejecutar este código en Chrome

 Uncaught TypeError: Cannot read properties of undefined (reading 'document') at grabLinks (<anonymous>:15:45) at <anonymous>:69:1

El error está en esta línea de código:

 videoList.push(openedWindow.document.querySelectorAll("div video"));

Mi pregunta es ¿qué estoy haciendo exactamente mal y cómo puedo solucionarlo?

Si necesita más información por favor dígame.

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

0

Dado que los enlaces están en el mismo origen que la página donde está ejecutando esto, debería poder acceder al contenido de los documentos, pero debe esperar a que se carguen esos contenidos, lo que su código actual no está haciendo. Eso implica esperar un evento de openedWindow , lo que significa que todo el proceso será asíncrono.

Por separado, su código actual está agarrando los elementos de video , pero está cerrando la ventana en la que viven esos elementos de video . Eso puede estar bien, pero por el nombre grabLinks parece que está principalmente interesado en el currentSrc o src de los elementos de video , así que tomemos eso.

Escribiría una función para hacer una sola ventana, probablemente devolviendo una promesa:

 function getVideoSources(link) { return new Promise((resolve, reject) => { const openedWindow = window.open(link, "_blank"); openedWindow.focus(); openedWindow.addEventListener("DOMContentLoaded", () => { try { const videoElements = openedWindow.document.querySelectorAll("div video"); const sources = Array.from(videoElements, element => element.currentSrc || element.src); resolve(sources); } catch (e) { reject(e); } finally { try { openedWindow.close(); } catch (e2) { } // In an up-to-date browser, you can leave // the `(e2)` part off } }); }); }

Luego, grabLinks podría ser una función async que funciona a través de las URL en serie (ya que el navegador no le permitirá abrir un montón de ventanas a la vez, y las llamadas de focus() interferirían entre sí):

 async function grabLinks(links) { const videoList = []; for (const link of links) { const sources = await getVideoSources(link); videoList.push(...sources); } return videoList; }

El valor de cumplimiento de la promesa de grabLinks será una matriz de los valores de propiedad currentSrc o src de los elementos.

Sin embargo, tenga en cuenta que esto debe iniciarse mediante una acción del usuario (clic en un botón o similar), y el navegador puede limitar la cantidad de ventanas que puede abrir seguidas.

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!