Проблема кроссбраузерности кода ?
Добрый день ! Проблема в следующем в опере он работает прекрасно, а в фаерфокс не падаёт никаких признаков жизни !
Просматривал код через fierbug показывает что ошибка в строчки с: var frameDocument = frame.contentDocument || frame.contentWindow.document; Вот весь код: var frame = parent.document.getElementsByTagName("frame")[1]; var frameDocument = frame.contentDocument || frame.contentWindow.document; var n = 1; var s = 0; alpha_page = Number(0);//начальная прозрачность alpha_speed = Number(0.05);//скорость увеличения прозрачности x_pos = Number(70);//начальное положения контента x_speed = Number(4);//скорость движения контента page = Number(1); mes_er = String("Эта страница уже открыта, пожалуйста выбирите другую!"); function button(){ document.getElementById('but_1').onclick = function(){if(page == 1){alert(mes_er);}else{;page = 1;next_page();}}; document.getElementById('but_2').onclick = function(){if(page == 2){alert(mes_er);}else{;page = 2;next_page();}}; document.getElementById('but_3').onclick = function(){if(page == 3){alert(mes_er);}else{;page = 3;next_page();}}; document.getElementById('but_4').onclick = function(){if(page == 4){alert(mes_er);}else{;page = 4;next_page();}}; } frame.onload = function() {//выполняем функцию после того как загрузиться страница n = 1; x_pos = 70; s = 0; open_page(); button(); } function next_page(){//выполняем функцию после нажатия на кнопку n = 1; s = 1; open_page(); } function open_page(){ if (s == 0){//если страница закрыта то => if (x_pos>24){ frameDocument.getElementsByTagName('DIV')[0].style.left = x_pos; x_pos -= x_speed; } if (alpha_page<1){ frameDocument.getElementsByTagName('DIV')[0].style.opacity = alpha_page; alpha_page+=alpha_speed; }else{ n = 99; } }else if (s == 1){ if (alpha_page>0){ frameDocument.getElementsByTagName('DIV')[0].style.opacity = alpha_page; alpha_page-=alpha_speed; }else{ n = 99; if (page == 1){ frame.src = "home.html" }else if (page == 2){ frame.src = "portfolio.html" }else if (page == 3){ frame.src = "services.html" }else if (page == 4){ frame.src = "contacts.html" }else{ alert("error"); } } } if (n < 99){ n++; setTimeout(open_page, 20); } } Подскажите как исправить ошибку !? |
Какую ошибку то фаербаг пишет? frame is null? Тогда нужно дождаться загрузки документа, а уже потом искать элементы.
|
Да, наверное: "дождаться загрузки документа, а уже потом искать элементы."
Я так сделал, но он выдаёт: useless setTimeout call (missing quotes around argument?) [Break on this error] setTimeout(open_page(frame,frameDocument), 20);\r\n var n = 1; var s = 0; alpha_page = Number(0);//начальная прозрачность alpha_speed = Number(0.05);//скорость увеличения прозрачности x_pos = Number(70);//начальное положения контента x_speed = Number(4);//скорость движения контента page = Number(1); mes_er = String("Эта страница уже открыта, пожалуйста выбирите другую!"); parent.document.getElementsByTagName("frame")[1].onload = function() {//выполняем функцию после того как загрузиться страница var frame = parent.document.getElementsByTagName("frame")[1]; var frameDocument = frame.contentDocument || frame.contentWindow.document; n = 1; x_pos = 70; s = 0; open_page(frame,frameDocument); button(); } function button(){ document.getElementById('but_1').onclick = function(){if(page == 1){alert(mes_er);}else{;page = 1;next_page();}}; document.getElementById('but_2').onclick = function(){if(page == 2){alert(mes_er);}else{;page = 2;next_page();}}; document.getElementById('but_3').onclick = function(){if(page == 3){alert(mes_er);}else{;page = 3;next_page();}}; document.getElementById('but_4').onclick = function(){if(page == 4){alert(mes_er);}else{;page = 4;next_page();}}; } function next_page(){//выполняем функцию после нажатия на кнопку n = 1; s = 1; open_page(); } function open_page(frame,frameDocument){ if (s == 0){//если страница закрыта то => if (x_pos>24){ frameDocument.getElementsByTagName('DIV')[0].style.left = x_pos; x_pos -= x_speed; } if (alpha_page<1){ frameDocument.getElementsByTagName('DIV')[0].style.opacity = alpha_page; alpha_page+=alpha_speed; }else{ n = 99; } }else if (s == 1){ if (alpha_page>0){ frameDocument.getElementsByTagName('DIV')[0].style.opacity = alpha_page; alpha_page-=alpha_speed; }else{ n = 99; if (page == 1){ frame.src = "home.html" }else if (page == 2){ frame.src = "portfolio.html" }else if (page == 3){ frame.src = "services.html" }else if (page == 4){ frame.src = "contacts.html" }else{ alert("error"); } } } if (n < 99){ n++; setTimeout(open_page(frame,frameDocument), 20); } } |
setTimeout(function(){open_page(frame,frameDocument)}, 20); Так, как у Вас, в setTimeout передается результат выполнения функции, а не ссылка на нее. |
too much recursion - это что значит ?
|
слишком много рекурсий :)
Где-то есть функция, которая вызывает сама себя, и не заканчивает процесс рекурсии. ЕМНИП, ФФ прерывает залипание скрипта в этом случае таким образом. |
Вот она :
function open_page(frame,frameDocument){ if (x_pos > 24){ frameDocument.getElementsByTagName('DIV')[0].style.left = x_pos; x_pos -= x_speed; } if (alpha_page < 1){ frameDocument.getElementsByTagName('DIV')[0].style.opacity = alpha_page; alpha_page+=alpha_speed; }else{ n = 99; alert (frameDocument); } if (n < 99){ n++; setTimeout(function(){open_page(frame,frameDocument)}, 20); } } А как исправить ? И вообще я правильно анимацию делаю ? |
Скажите в чём ошибка !?
|
Да ни в чем, похоже. Покажите проблемную страницу. Ну и все же, я бы предпочел setInterval
|
Цитата:
|
Часовой пояс GMT +3, время: 23:18. |