Вход

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


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
Но при длительной загрузке страницы идет переполнение стека
У вас просто в коде ошибка.

В функцию 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()