Quiero hacer una modificación en los iframes incrustados de YouTube para mejorar la puntuación de Lighthouse, pero no puedo hacer que funcione la instrucción if:
if (document.getElementsByTagName('iframe')){ function init() { var vidDefer = document.getElementsByTagName('iframe'); for (var i=0; i<vidDefer.length; i++) { if(vidDefer[i].getAttribute('data-src')) { vidDefer[i].setAttribute('src',vidDefer[i].getAttribute('data-src')); } } } window.onload = init; function parseJSAtOnload() { var element = document.createElement("script"); element.src = "https://www.youtube-nocookie.com/yts/jsbin/player_ias-vflRCamp0/en_US/base.js"; document.body.appendChild(element); } if (window.addEventListener) window.addEventListener("load", parseJSAtOnload, false); else if (window.attachEvent) window.attachEvent("onload", parseJSAtOnload); else window.onload = parseJSAtOnload; }Solo quiero ejecutar este fragmento si existe un elemento iframe en la página actual y no siempre. De esta manera podría incrustar el código en cada página de mi sitio web, sin importar el contenido. Con el código anterior, todavía se activa siempre. ¿Cómo hacer que funcione solo en páginas con un iframe?
Veo este error en la consola del desarrollador en todas las páginas, incluso en las que no tienen elementos iframe:
OBTENGA https://www.youtube-nocookie.com/yts/jsbin/player_ias-vflRCamp0/en_US/base.js net::ERR_ABORTED 404
document.getElementsByTagName() devuelve una colección vacía.
Las HTMLCollections vacías son objetos, que se reducen a la primitiva true . (Lo sé, JavaScript es una locura...)
Entonces, if( document.getElementsByTagName( 'no-such-element' ) ) siempre se evaluará como true .
Usted quiere:
if( document.getElementsByTagName( 'iframe' ).length > 0 ) { //...