Переполнен стек. Как избежать?
Здравствуйте. Сделал вот такой скрипт. Дабы определять какие теги\элементы на странице уже обработаны браузером.
loadDed=0; y=0; function load(x){ z=y+x; if(document.getElementsByTagName("body")[z]){//Проверяем "готов" ли нужный нам элемент. браузер именно тут пишет что стек переполнен. loadDed+10;//Прибавляем 10 дабы отследить сколько процентов уже обработано браузером. alert(loadDed); } if(loadDed!=100){ setTimeout(load(x),100);//Делаем цикл дабы функция повторялась пока не погрузится страница. } } load(1)Но почему-то переполняется стек. Хотя по сути цикл не должен быть бесконечный. Объясните что я не так сделал .-. |
Это бесконечная рекурсия. В 10-й строчке функция load вызывает себя снова и снова.
|
document.getElementsByTagName("body") в любом случае дает коллекцию единичной длины
так что функция все-равно не будет работать |
mta88,
то есть разные элементы так не вызвать? |
Вообще мозговзрыв!)
Цитата:
|
Цитата:
document.getElementsByTagName('*') И вообще, если Вы хотите сделать полосу загрузки страницы, то ловите лучше onload изображений. Можно вот так попробовать, но я не проверял. <div style="width:100px; background:#9F9; border:1px solid #222"> <div style="width:1px; height:10px; background:red" id="loading"></div> </div> function loadComplete() { loading += 100/imgs.length; document.getElementById('loading').style.width = loading+'px'; } var imgs = document.getElementsByTagName('img'), loading = 0; for(i=0; i<imgs.length; i++) imgs[i].onload = loadComplete; |
Ruslan_xDD,
честно хотел сделать что-то в этом духе, но ко всем элементам в body |
koeshiro, а что там загружается то? По моему все элементы кроме img загружаются сразу же, так что отлавливать их нечего, ибо загружаются они почти мгновенно.
|
Ruslan_xDD,
все остальные просто за компанию. Для точности . . :) Но это ещё нужно будет делать. И делать более обдуманно чем до этого. |
Часовой пояс GMT +3, время: 09:27. |