Различаются несколько фреймов на нескольких страницах? - PullRequest
0 голосов
/ 01 ноября 2019

Мой код перестает работать правильно после идентификатора "greMapTempe";Я предполагаю, что это потому, что он не может найти этот идентификатор на многих страницах, к которым он подключен. Загружаемые фреймы различаются на каждой странице, поэтому мне нужно, чтобы мой скрипт пропустил идентификаторы, которые он не может найти, а затем продолжил поиск следующего идентификатора. Что я могу сделать с ударным кодом, чтобы убедиться, что все идентификаторы проверяются, даже если их нет на странице?

function loadDeferredIframe() {
	var iframe = document.getElementById("greYoutube");
	iframe.src = "https://www.youtube.com/embed/h7_w43jJ0Ts"

	var iframe = document.getElementById("greMapTempe");
	iframe.src = "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3330.0372197439724!2d-111.96932568528953!3d33.422273980782116!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x0!2zMzPCsDI1JzIwLjIiTiAxMTHCsDU4JzAxLjciVw!5e0!3m2!1sen!2sus!4v1486774192595"

	var iframe = document.getElementById("greMapCincinnati");
	iframe.src = "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3086.8059851441258!2d-84.4652936843564!3d39.31532112980541!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x88404fb4ec94a687%3A0x915a9a0db6e53917!2sGreat+Room+Escape+Cincinnati!5e0!3m2!1sen!2sus!4v1541446663243"

	var iframe = document.getElementById("greMapCleveland");
	iframe.src = "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2992.564362618732!2d-81.627932484311!3d41.405266202849035!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x8830e442a6185089%3A0x90787a2298a6c3c2!2sGreat+Room+Escape+Cleveland!5e0!3m2!1sen!2sus!4v1541446505618"

	var iframe = document.getElementById("greMapColumbus");
	iframe.src = "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d12214.714268930691!2d-82.9792519!3d40.0602736!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xd1a0ee0aa5fb171a!2sGreat+Room+Escape+Columbus!5e0!3m2!1sen!2sus!4v1541446346773"

	var iframe = document.getElementById("greMapAustin");
	iframe.src = "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3443.8281848309443!2d-97.71271668471364!3d30.32740461210432!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x8644ca3ced1c17f7%3A0x7bd80180add156d1!2sMind+Spark!5e0!3m2!1sen!2sus!4v1472767173729"

	var iframe = document.getElementById("greMapDallas");
	iframe.src = "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d13390.834398025358!2d-96.7070997!3d32.9587021!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x897c1a032f856003!2sGreat+Room+Escape+Dallas!5e0!3m2!1sen!2sus!4v1541446025561"

	var iframe = document.getElementById("greSanAntonio");
	iframe.src = "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d13900.967422077894!2d-98.4774668!3d29.4217269!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xfee289ea3851e800!2sGreat+Room+Escape+San+Antonio!5e0!3m2!1sen!2sus!4v1541445639522"
};
window.onload = loadDeferredIframe;

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Существует несколько способов обойти эту проблему:

1- Проверка того, что переменная не равна нулю, перед изменением ее src attr:

Самый базовый подход, но вероятнее всего самыйизбыточный (если вы не используете вспомогательную функцию, такую ​​как ответ @ user1538301):

var iframe = document.getElementById("greYoutube");
if(iframe) {
    iframe.src = "https://www.youtube.com/embed/h7_w43jJ0Ts"
}

2- Использование jQuery:

Использование jQuery для изменения элемента по ID (или любому селектору) не вызоветошибка, даже если совпадений нет.

//will always work, even if there is no match
$("#greYoutube").attr("src", "https://www.youtube.com/embed/h7_w43jJ0Ts");

3- Использование селектора, отличного от ID:

Преимущество этого третьего подхода состоит в том, что он является лаконичным и keepbale , так как вам не нужно копировать / вставлять его столько раз, сколько у вас есть iframes .

Вы можете установить конкретное имя класса для вашегоiframes для отсрочки, а также атрибут data-src (или назовите его как хотите), который содержит источник, который должен быть новым источником для целевого iframe. Позвольте мне объяснить:

HTML:

<iframe class='defer' src='someSrc' data-src='https://www.youtube.com/embed/h7_w43jJ0Ts'/>

JS:

//this will not throw an error, because if there is no such element, 
//'iframesToDefer' will be empty and thus we won't enter the loop.
var iframesToDefer = document.getElementsByClassName('defer');
for(var iframe of iframesToDefer) {
    iframe.src = iframe.dataset['src'];
}

В примечании стороны не следует объявлять переменную болеечем один раз (я имею в виду вашу переменную iframe).

0 голосов
/ 01 ноября 2019

Проверьте, существует ли элемент перед установкой src, иначе вы получите ошибку и выполнение функции остановится.

function loadDeferredIframe() {
    var tryLoadIFrame = function (ID, URL) {
        var iFrame = document.getElementById(ID);
        if (iFrame) {
            iFrame.src = URL;
        }
    }
    tryLoadIFrame("greYoutube", "https://www.youtube.com/embed/h7_w43jJ0Ts");


    tryLoadIFrame("greMapTempe", "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3330.0372197439724!2d-111.96932568528953!3d33.422273980782116!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x0!2zMzPCsDI1JzIwLjIiTiAxMTHCsDU4JzAxLjciVw!5e0!3m2!1sen!2sus!4v1486774192595");


    tryLoadIFrame("greMapCincinnati", "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3086.8059851441258!2d-84.4652936843564!3d39.31532112980541!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x88404fb4ec94a687%3A0x915a9a0db6e53917!2sGreat+Room+Escape+Cincinnati!5e0!3m2!1sen!2sus!4v1541446663243");


    tryLoadIFrame("greMapCleveland", "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2992.564362618732!2d-81.627932484311!3d41.405266202849035!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x8830e442a6185089%3A0x90787a2298a6c3c2!2sGreat+Room+Escape+Cleveland!5e0!3m2!1sen!2sus!4v1541446505618");


    tryLoadIFrame("greMapColumbus", "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d12214.714268930691!2d-82.9792519!3d40.0602736!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xd1a0ee0aa5fb171a!2sGreat+Room+Escape+Columbus!5e0!3m2!1sen!2sus!4v1541446346773");


    tryLoadIFrame("greMapAustin", "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3443.8281848309443!2d-97.71271668471364!3d30.32740461210432!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x8644ca3ced1c17f7%3A0x7bd80180add156d1!2sMind+Spark!5e0!3m2!1sen!2sus!4v1472767173729");


    tryLoadIFrame("greMapDallas", "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d13390.834398025358!2d-96.7070997!3d32.9587021!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x897c1a032f856003!2sGreat+Room+Escape+Dallas!5e0!3m2!1sen!2sus!4v1541446025561");


    tryLoadIFrame("greSanAntonio", "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d13900.967422077894!2d-98.4774668!3d29.4217269!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xfee289ea3851e800!2sGreat+Room+Escape+San+Antonio!5e0!3m2!1sen!2sus!4v1541445639522");

};
window.onload = loadDeferredIframe;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...