Facebook Phonegap xCode:从授权返回时程序吓坏了

时间:2012-03-03 05:09:33

标签: facebook-graph-api jquery-mobile cordova

这就是我想要的:对话框上写着“嘿,我们必须登录到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);
                              });
        }

在document.addEventListener上调用getLoginStatus('deviceready',function(){

1 个答案:

答案 0 :(得分:0)

只是猜测,但这些应该是开始的好方法:

A)多重绑定(更容易)
可能是您多次绑定到按钮,因此当您单击它时,您的功能会多次触发。

要检查是否只需将console.log添加到点击处理程序,并查看点击按钮时触发的频率。

你必须记住Jquery Mobile如何处理页面 - 加载的第一个页面是你的“锚页面”,只要你不是rel =“external” - 链接到另一个页面就应该留在DOM中然后将成为你的新主页)。加载时,所有其他页面(包括对话框)都会附加到锚页面DOM中。您的锚页面只是隐藏,但没有消失,所以很容易多次绑定,认为“页面已经消失,需要再次绑定”。使用Phonegap我认为你有一个包含所有页面的文件,所以这也应该保留在那里。

B)太多的哈希变换触发(棘手)
将JQM转换视为两个并行进程,因为hashChange随着每个转换一起触发。在正向转换时,哈希转换被阻止(检查JQM $ .mobile.urlHistory.ignoreNextHashChange ),它可以通过的向后转换并负责反向转换。

如果页面行为异常,您必须找出触发和阻止的进程。在_handleHashChange中的JQM内部的控制台并单击路由(在_handleHashChange之前搜索“click routing”)以查看发生的情况。

我的猜测是A)

祝你好运,让我知道它是否有效,或者如果你对A)和B都有任何更多的问题