Проблема кроссбраузерности кода ?
Добрый день ! Проблема в следующем в опере он работает прекрасно, а в фаерфокс не падаёт никаких признаков жизни !
Просматривал код через 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, время: 17:12. |