Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поиск элемента сайта после загрузки на странице этого элемента (https://javascript.ru/forum/misc/79484-poisk-ehlementa-sajjta-posle-zagruzki-na-stranice-ehtogo-ehlementa.html)

Jack24 14.02.2020 15:56

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

Описание проблемы:
Пишу расширение для оперы. Появилась проблема с выполнением кода после загрузки элементов страницы даже при вставке в функцию 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);	

	}

}

}

Nexus 14.02.2020 19:35

Цитата:

Сообщение от 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.
Межстрочное расстояние можно настроить в большинстве редакторов.

Jack24 16.02.2020 16:43

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


Часовой пояс GMT +3, время: 17:22.