我想修改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 ) {
//...