Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2009, 08:10
Профессор
Отправить личное сообщение для Andrei Посмотреть профиль Найти все сообщения от Andrei
 
Регистрация: 31.10.2009
Сообщений: 151

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

Подскажите как исправить ошибку !?
Ответить с цитированием
  #2 (permalink)  
Старый 05.11.2009, 09:41
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Какую ошибку то фаербаг пишет? frame is null? Тогда нужно дождаться загрузки документа, а уже потом искать элементы.
Ответить с цитированием
  #3 (permalink)  
Старый 05.11.2009, 10:14
Профессор
Отправить личное сообщение для Andrei Посмотреть профиль Найти все сообщения от Andrei
 
Регистрация: 31.10.2009
Сообщений: 151

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

Я так сделал, но он выдаёт:
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);
    } 
}
Ответить с цитированием
  #4 (permalink)  
Старый 05.11.2009, 12:52
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

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

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

Последний раз редактировалось e1f, 05.11.2009 в 12:54.
Ответить с цитированием
  #5 (permalink)  
Старый 05.11.2009, 13:29
Профессор
Отправить личное сообщение для Andrei Посмотреть профиль Найти все сообщения от Andrei
 
Регистрация: 31.10.2009
Сообщений: 151

too much recursion - это что значит ?
Ответить с цитированием
  #6 (permalink)  
Старый 05.11.2009, 13:42
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

слишком много рекурсий
Где-то есть функция, которая вызывает сама себя, и не заканчивает процесс рекурсии. ЕМНИП, ФФ прерывает залипание скрипта в этом случае таким образом.
Ответить с цитированием
  #7 (permalink)  
Старый 05.11.2009, 13:54
Профессор
Отправить личное сообщение для Andrei Посмотреть профиль Найти все сообщения от Andrei
 
Регистрация: 31.10.2009
Сообщений: 151

Вот она :
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, 05.11.2009 в 14:17.
Ответить с цитированием
  #8 (permalink)  
Старый 06.11.2009, 10:06
Профессор
Отправить личное сообщение для Andrei Посмотреть профиль Найти все сообщения от Andrei
 
Регистрация: 31.10.2009
Сообщений: 151

Скажите в чём ошибка !?
Ответить с цитированием
  #9 (permalink)  
Старый 06.11.2009, 12:41
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Да ни в чем, похоже. Покажите проблемную страницу. Ну и все же, я бы предпочел setInterval
Ответить с цитированием
  #10 (permalink)  
Старый 06.11.2009, 12:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от e1f
Ну и все же, я бы предпочел setInterval
А я бы нет )))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема кроссбраузерности моста из явы во флэш Denisator Internet Explorer 3 17.08.2009 13:09
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47
Проблема с обработкой селектов html кода, пришедшего через ajax запрос Rage jQuery 6 26.01.2009 14:15