Я работал над этим последние несколько дней и чувствую, что близок, но что-то упускаю. То, что я пытаюсь сделать, это отобразить модальное всплывающее окно, когда пользователь выбирает язык из виджета Google Translate.
Поскольку языки, которые могут выбирать пользователи, находятся внутри iframe, добавленного виджетом javascript после загрузки dom, я использую setInterval для проверки доступности iframe (по какой-то причине функция jquery .load() никогда не будет работать для меня). У меня также есть другой метод setInterval для проверки загрузки языковых классов (они не доступны сразу, когда доступен iframe).
Когда я привязываю событие щелчка к языковым элементам, все работает так, как ожидалось... один раз... для любого элемента, на который нажали. Если я уберу clearInterval(waitForLanguageLinks)
, то все будет работать как положено каждый раз, но это вызовет утечку памяти и страница в конце концов вылетит (как и следовало ожидать).
Итак, мой вопрос: как я могу привязать событие щелчка к каждому из этих элементов внутри обратного вызова setInterval()
и оставить это событие связанным после вызова clearInterval()
(надеюсь, это имеет смысл).
$(document).ready(function(){
var iframe;
var languageElements;
var translateIframeCheck = setInterval(function(){
iframe = $('.goog-te-menu-frame').contents();
if(iframe.length > 0){
clearInterval(translateIframeCheck);
}
}, 100);
var waitForLanguageLinks = setInterval(function(){
languageElements = iframe.find('.goog-te-menu2-item');
if(typeof iframe !== "undefined" && languageElements.length > 0){
languageElements.click(function(){
console.log($(this).find('.text').html());
});
clearInterval(waitForLanguageLinks);
}
}, 100);
});
iframe, загруженный скриптом Google для перевода:
<iframe class="goog-te-menu-frame skiptranslate" title="Language Translate Widget" style="visibility: visible; box-sizing: content-box; width: 1004px; height: 285px; left: 413.5px; top: 167px;" frameborder="0"></iframe>
src
отсутствует. - person whitwhoa   schedule 22.02.2018.goog-te-menu2-item
. HTML-код каждого из этих тегов привязки соответствует языку, который выбирает пользователь. Содержимое самого iframe не меняется. Когда пользователь щелкает одну из этих ссылок, Google переводит содержимое родительского элемента iframe, т. е. веб-страницы. - person whitwhoa   schedule 22.02.2018