如何运行一个JavaScript片段仅当iframe存在于当前页面?



我想修改YouTube嵌入的iframe来提高Lighthouse的分数,但是我不能使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;
}

我只希望在当前页面上存在iframe元素时运行此代码片段,而不是总是这样。这样我就可以将代码嵌入到我网站的每个页面上,无论内容如何。使用上面的代码,它仍然总是处于活动状态。如何使它工作和iframe只在页面吗?

我在所有页面的开发控制台都看到这个错误,甚至对于那些没有任何iframe元素的页面:

https://www.youtube-nocookie.com/yts/jsbin/player_ias-vflRCamp0/en_US/base.jsnet:: ERR_ABORTED 404

document.getElementsByTagName()返回一个空集合。
空HTMLCollections是对象,可以简化为原语true。(我知道,JavaScript是疯狂的…)

因此,if( document.getElementsByTagName( 'no-such-element' ) )总是求值为true

你想:

if( document.getElementsByTagName( 'iframe' ).length > 0 ) {
//...

相关内容

  • 没有找到相关文章

最新更新