javascript sdk正在打开多个登录对话框

时间:2012-08-29 18:21:21

标签: javascript jquery facebook facebook-javascript-sdk

我遇到了一个问题,即Javascript SDK会打开多个对话框来登录。

如果我登录然后输出它工作正常,但下次登录时会打开2个弹出窗口。下次它将打开3,依此类推。

Page正在使用PHP,Javascript / Jquery

代码是本教程的调整版本 http://thinkdiff.net/facebook/new-javascript-sdk-oauth-2-0-based-fbconnect-tutorial/

这是我的代码:

    <div id="fb-root"></div>

<script type="text/javascript">
        var button;


        window.fbAsyncInit = function() {
            FB.init({ appId: '<?php echo $facebook->getAppID() ?>',
                status: true,
                cookie: false,
                xfbml: true,
                oauth: true});



           function updateButton(response) {

                    if (response.authResponse) {
                    $('#loged').hide();
                    $('#logged').show();
                    //user is already logged in and connected
                    FB.api('/me', function(info) {
                        login(response, info);
                    });

                    $("#logged").click(function() {
                        FB.logout(function(response) {
                            logout(response);
                        });
                    });


                } else {
                    //user is not connected to your app or logged out
                    $('#logged').hide();
                    $('#loged').show();

                    $("#loged").click(function() {
                        showLoader(true);
                        FB.login(function(response) {
                            if (response.authResponse) {
                                FB.api('/me', function(info) {
                                    login(response, info);
                                });
                            } else {
                                //user cancelled login or did not grant authorization
                                showLoader(false);
                            }
                        }, {scope:'email,user_likes'});
                    })
                }
            }

            // run once with current status and whenever the status changes
            FB.getLoginStatus(updateButton);
            FB.Event.subscribe('auth.statusChange', updateButton);
        };
        (function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol
                + '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        }());

        function login(response, info){
            if (response.authResponse) {
                $('#loged').hide();
                $('#logged').show();
                showLoader(false);

            }
        }

        function logout(response){
            showLoader(false);
        }

        //shows ajax loader
        function showLoader(status){
            if (status)
                document.getElementById('loader').style.display = 'block';
            else
                document.getElementById('loader').style.display = 'none';
        }

    </script>

    <img id="loged" src="img/in.png"/>
    <img id="logged" hidden="hidden" src="img/out.png"/>
    <div id="loader" style="display:none">
    <img src="img/ajax-loader.gif" alt="loading" />
    </div>
    <br />
    <div id="user-info"></div>
    <br />
    <div id="debug"></div>

1 个答案:

答案 0 :(得分:0)

  

如果我登录然后输出它工作正常,但下次登录时会打开2个弹出窗口。下次它将打开3,依此类推。

你是否留在同一页面 - 没有重新加载?

这将解释您所描述的内容,因为每次调用函数updateButton并进入else分支时,它都会向{em>新附加点击事件处理程序添加{ {1}},所以他们会开始“累积”,因此FB.login将被多次调用 - 因为每个单个点击将触发多个处理程序(所有这些都是同样的东西)。