-1

JavascriptSDKがログインするために複数のダイアログを開くという問題があります。

ログインしてからログアウトすると正常に動作しますが、次にログインすると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 になります。複数回呼び出されます – 1 回のクリックごとに複数のハンドラーがトリガーされるため(すべて同じことを行います) 。

于 2012-08-30T11:48:47.853 に答える