Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема кроссбраузерности кода ? (https://javascript.ru/forum/misc/5976-problema-krossbrauzernosti-koda.html)

Andrei 05.11.2009 08:10

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

Подскажите как исправить ошибку !?

Octane 05.11.2009 09:41

Какую ошибку то фаербаг пишет? frame is null? Тогда нужно дождаться загрузки документа, а уже потом искать элементы.

Andrei 05.11.2009 10:14

Да, наверное: "дождаться загрузки документа, а уже потом искать элементы."

Я так сделал, но он выдаёт:
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);
    } 
}

e1f 05.11.2009 12:52

setTimeout(function(){open_page(frame,frameDocument)}, 20);

Так, как у Вас, в setTimeout передается результат выполнения функции, а не ссылка на нее.

Andrei 05.11.2009 13:29

too much recursion - это что значит ?

e1f 05.11.2009 13:42

слишком много рекурсий :)
Где-то есть функция, которая вызывает сама себя, и не заканчивает процесс рекурсии. ЕМНИП, ФФ прерывает залипание скрипта в этом случае таким образом.

Andrei 05.11.2009 13:54

Вот она :
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);
 } 
}


А как исправить ? И вообще я правильно анимацию делаю ?

Andrei 06.11.2009 10:06

Скажите в чём ошибка !?

e1f 06.11.2009 12:41

Да ни в чем, похоже. Покажите проблемную страницу. Ну и все же, я бы предпочел setInterval

Kolyaj 06.11.2009 12:44

Цитата:

Сообщение от e1f
Ну и все же, я бы предпочел setInterval

А я бы нет )))


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