Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.02.2020, 15:56
Новичок на форуме
Отправить личное сообщение для Jack24 Посмотреть профиль Найти все сообщения от Jack24
 
Регистрация: 20.07.2019
Сообщений: 7

Поиск элемента сайта после загрузки на странице этого элемента
Хелоу ворлд!

Описание проблемы:
Пишу расширение для оперы. Появилась проблема с выполнением кода после загрузки элементов страницы даже при вставке в функцию window.onload.

Проблема:
При поиске класса его значение равно null (Еще не прогрузился).

Мои попытки решения:
Я пробовал задать поиск класса с определенной частотой, если нулл, то повторяй операцию через n секунд. Но при длительной загрузке страницы идет переполнение стека.

ВОПРОС:
Есть ли способ выполненить код после загрузки всех ресурсов и выполнения скриптов с сервера?

Пример кода, который я использовал:

document.onclick = function(event){

function WaitForImageUserYoutube(){

	var imageUserYoutube = document.getElementsByClassName("yt-simple-endpoint style-scope ytd-video-owner-renderer")[0];

	// if element exists

	if(imageUserYoutube != undefined){

		imageUserYoutube.onload = function(){

			// do something

		}

	}

		else

	{

		setTimeout(WaitForImageUserYoutube(), interval);	

	}

}

}
Ответить с цитированием
  #2 (permalink)  
Старый 14.02.2020, 19:35
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,794

Сообщение от Jack24
Но при длительной загрузке страницы идет переполнение стека
У вас просто в коде ошибка.

В функцию setTimeout нужно передавать функцию, вы же передаете туда результат работы вашей функции WaitForImageUserYoutube, т.е. undefuned.

Попробуйте так:
window.onload = function(event) {
    function waitForImageUserYoutube() {
        var image = document.querySelector('.yt-simple-endpoint.style-scope.ytd-video-owner-renderer');
        if (!image) {
            return void setTimeout(waitForImageUserYoutube, interval || 1e3);
        }

        var onLoadCallback = function() {
            // do something
        };

        var imageIsLoaded = !(!image.complete || image.naturalWidth === 0);
        if (imageIsLoaded) {
            onLoadCallback.call(image);
        } else {
            image.onload = onLoadCallback;
        }
    };
};


PS. пересмотрите, пожалуйста, свой code style.
Межстрочное расстояние можно настроить в большинстве редакторов.

Последний раз редактировалось Nexus, 14.02.2020 в 19:39.
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2020, 16:43
Новичок на форуме
Отправить личное сообщение для Jack24 Посмотреть профиль Найти все сообщения от Jack24
 
Регистрация: 20.07.2019
Сообщений: 7

Спасибо!
Действительно ошибка была в функции setTimeout()
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запароленные блоки на странице сайта. rusaln917 Общие вопросы Javascript 1 18.01.2018 18:40
Как скрыть содержимое div до полной загрузки сайта? Georgian Элементы интерфейса 2 01.12.2015 16:15
Изменить текст в iframe после загрузки страницы сайта aleksandr8i Общие вопросы Javascript 0 16.08.2015 10:58
Сделать поиск со стороннего сайта kozlik Работа 1 19.09.2014 12:23
background resize IceDvl jQuery 4 25.04.2014 17:54