Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

132
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda