2014-05-21 4 views
0

У меня есть функция FB.getLoginStatus, которая существует для обхода функции входа, если пользователь уже утвержденную приложение:Как обойти экран входа в JQuery Mobile?

FB.getLoginStatus(function(response) { 
     if (response.status === 'connected') { 

     userID = response.authResponse.userID; 
     accessToken = response.authResponse.accessToken; 

     $.mobile.pageContainer.pagecontainer('change' , '#homepage'); 


     navigator.geolocation.getCurrentPosition(onSuccess, onError); 


     } else if (response.status === 'not_authorized') { 
     $.mobile.pageContainer.pagecontainer('change' , '#login'); 
     } else { 
     $.mobile.pageContainer.pagecontainer('change' , '#login'); 
     } 
    }); 

Он работает в том, что он проверяет состояние входа, но он быстро мигает экран входа в систему прежде чем он перейдет на главный экран. Есть ли способ, которым я могу полностью избежать мигания экрана входа в систему и просто загрузить главный экран, если пользователь подключен?

ответ

0

Да, есть рабочий раствор:

$(document).on('pagebeforechange', function(e, data){ 
    var to = data.toPage, 
     from = data.options.fromPage; 

    if (typeof to === 'string') { 
     var u = $.mobile.path.parseUrl(to); 
     to = u.hash || '#' + u.pathname.substring(1); 
     if (from) from = '#' + from.attr('id'); 

     if (from === '#index' && to === '#second') { 
      alert('Can not transition from #index to #second!'); 
      e.preventDefault(); 
      e.stopPropagation(); 

      // remove active status on a button, if transition was triggered with a button 
      $.mobile.activePage.find('.ui-btn-active').removeClass('ui-btn-active ui-shadow').css({'box-shadow':'0 0 0 #3388CC'}); 
     } 
    } 
}); 

Что вам нужно сделать здесь добавить еще один слой проверки этой линии:

if (from === '#index' && to === '#second') { 

Все, что вам нужно сделать, это проверить, если пользователь имеет разрешено через Facebook и перенаправляет его программно, используя функцию changePage().

Узнать больше об этом here.

Update

Я забыл, этот пример может не работать в вашем случае, потому что если вы проверяете его в начале вы не будете иметь целевую страницу, потому что вы здесь детерминированные какая страница первый: Логин страница или Главная страница.

Этот код поможет вам в этом случае:

$(document).on('pagebeforechange', function(e, data){ 
    var to = data.toPage; 

    if (typeof to === 'string') { 
     var u = $.mobile.path.parseUrl(to); 
     to = u.hash || '#' + u.pathname.substring(1); 

     if (to === '#second') { 
      alert('Can not transition the page #second!'); 
      e.preventDefault(); 
      e.stopPropagation(); 

      // remove active status on a button, if transition was triggered with a button 
      $.mobile.activePage.find('.ui-btn-active').removeClass('ui-btn-active ui-shadow').css({'box-shadow':'0 0 0 #3388CC'}); 
     } 
    } 
}); 
+0

мне просто нужно добавить {переход: «Нет»} к действию $ .mobile.pageContainer. Спасибо за ваше объяснение, но я считаю, что он был больше ориентирован на предотвращение навигации на определенную страницу и, к сожалению, не был исправлен для моей ситуации. – user3294779

Смежные вопросы