-1

我遇到了 Javascript SDK 打开多个对话框以登录的问题。

如果我登录然后退出它工作正常,但下次我登录时会打开 2 个弹出窗口。下次它会打开3等等。

该页面使用 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>
4

1 回答 1

0

如果我登录然后退出它工作正常,但下次我登录时会打开 2 个弹出窗口。下次它会打开3等等。

您是否停留在同一页面上 - 没有在两者之间重新加载它?

这将解释您所描述的内容,因为每次updateButton调用您的函数并进入 else 分支时,它都会向 中添加一个的附加单击事件处理程序#loged,因此它们将开始“累积”,因此 FB.login 将是多次调用——因为每次单击都会触发多个处理程序(它们都做同样的事情)。

于 2012-08-30T11:48:47.853 回答