Facebook PhoneGap XCode: программа выходит из себя, когда возвращается из авторизации - PullRequest
0 голосов
/ 03 марта 2012

Вот что я хочу: диалоговое окно с надписью «Эй, нам нужно войти в Facebook и авторизоваться», а затем кнопка, которая переходит на страницу входа в Facebook, чтобы затем вернуться на главную страницу (ту, которая открыла диалог .

Прямо сейчас, диалоговое окно всплывает нормально, затем оно правильно перенаправляет на Facebook, затем перенаправляет назад, но вместо того, чтобы просто выскочить на главную страницу, оно выскакивает, затем снова всплывает, затем снова всплывает. Я уверен, что сделал то, чего не должен был делать. Также ПОЖАЛУЙСТА, прокомментируйте мой jquery, потому что я новичок в этом и предпочел бы не иметь вредных привычек.

Вот что у меня есть.

index.html, который имеет это диалоговое окно в теле:

<div id="dialog1" data-role="dialog" data-theme="b">
            <div data-role="header" data-position="inline">
                <h1> Welcome!</h1>          
            </div> 
            <div data-role="content">
                <p>
                <h5> Hey! Welcome to Tag Search. We need to take a few steps to set up the app. <br><br>
                    First you have to login to facebook and authorize Tag Search. Don't worry, we'll never post anything to your wall unless you tell us to! <br>
                </h5>
                </p>
                <a id="loginBtn" data-role="button">Click Here to Login!</a> 

            </div> 
        </div>

In my <script> tags I have this event listener:


    $("#loginBtn").bind("click",function(x){
    $('#dialog1').dialog('close');
    login();
    });

Также:

    function login() {
            FB.login(
                     function(response) {
                     console.log(response.session);
                     if (response.session) {
                        getLoginStatus();
                     //alert('logged in');
                     } else {
                     alert('not logged in');
                     }
                     },
                     { perms: "email, friends_photos, offline_access" }
                     );
        }

И

    function getLoginStatus() {

            FB.getLoginStatus(function(response) {
                              if (response.status == 'connected') {
                              //alert('Connected');
                              if(!session_access_token)
                                session_access_token=response.session.access_token;
                                getMe();
                                $("#loginout").text('Logout');
                              $("#loginout").bind('click', function(){logout()});
                                           } else {
                                $.mobile.changePage('#dialog1', 'pop');
                              }
                              console.log(response);
                              });
        }

getLoginStatus вызывается для document.addEventListener ('deviceready', function () {

1 Ответ

0 голосов
/ 04 марта 2012

просто догадываюсь, но это должны быть хорошие способы начать:

A) множественные связи (проще)
Возможно, вы несколько раз привязываете свою кнопку, поэтому при нажатии на нее ваши функции запускаются несколько раз.

Чтобы проверить, просто добавьте console.log в ваш обработчик кликов и посмотрите, как часто он срабатывает при нажатии на кнопку.

Вы должны помнить, как Jquery Mobile обрабатывает страницы - первая загруженная страница - это ваша «якорная страница», которая должна оставаться в DOM, пока вы не используете rel = "external" - ссылку на другую страницу (которая станет вашей новой якорной страницей). Все дополнительные страницы (включая диалоги) добавляются в DOM привязанной страницы при их загрузке. Ваша якорная страница просто скрыта, но не исчезла, поэтому ее можно связывать несколько раз, думая, что «страница ушла, нужно связать снова». Использование PhoneGap Я думаю, что у вас есть один файл со всеми страницами, поэтому он также должен там храниться.

B) Слишком много стрельб хеш-хангов (хитро)
Думайте о переходах JQM как о двух параллельных процессах, потому что hashChange запускается вместе с каждым переходом. На прямых переходах хэш-обмен блокируется (проверьте JQM $. Mobile.urlHistory.ignoreNextHashChange ), на обратных переходах он может пройти и позаботится об обратном переходе.

Вы должны выяснить, какие процессы запускаются и блокируются, если ваша страница ведет себя странно. Консоль внутри JQM в _handleHashChange и нажмите маршрутизацию (поиск «маршрутизация клика» непосредственно перед _handleHashChange), чтобы увидеть, что происходит.

Я думаю, будет А)

Удачи, и дайте мне знать, если это работает или у вас есть еще квесты как на А), так и на Б)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...