2010-07-26 53 views
1

我抄自FB.init documentation此代碼:FB JS SDK:init不工作?

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US" type="text/javascript"></script> 

... 
    <!-- facebook JS SDK init --> 
      <div id="fb-root"></div> 
      <script> 
       window.fbAsyncInit = function() { 
        FB.init(
        { 
         appId: '<?= FacebookHelper::FACEBOOK_APP_ID ?>', 
         status: true, 
         cookie: true, 
         xfbml: true 
        }); 
       }; 

       (function() { 
        var e = document.createElement('script'); 
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
        e.async = true; 
        document.getElementById('fb-root').appendChild(e); 
       }()); 
      </script> 

我把它只是我的</body>標記之前(因爲它們在文檔中推薦),但我得到這個奇怪的錯誤(我可以通過螢火蟲看):

b is undefined 
[Break on this error] if(!window.FB)FB={};FB.forEach=functio...B.TypeLoader.subclass,FB.TypeLoader); 

現在,起初,我以爲這一定是我的代碼中的錯誤,但我越去想它,我記得聽到螢火蟲和Facebook JavaScript之間的一些問題就越多。是這個問題,還是我忘了什麼?

回答

4

我認爲這是因爲您正在使用Facebook Connect的舊版本。你並不需要用新的JS SDK包括它:

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US" type="text/javascript"></script> 

另外,Facebook建議將支持異步加載代碼開放body標記之後,如(但它是你的呼叫):

<body> 
    <div id="fb-root"></div> 
    <script> 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId : 'YOUR APP ID', 
      status : true, // check login status 
      cookie : true, // enable cookies to allow the server to access the session 
      xfbml : true // parse XFBML 
     }); 
     }; 

     (function() { 
     var e = document.createElement('script'); 
     e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
     e.async = true; 
     document.getElementById('fb-root').appendChild(e); 
     }()); 
    </script> 
    ... 
    ... 
</body> 

Firebug似乎並不是這裏的問題。

1

我有類似的問題與FB> UI調用的飼料對話。我的頁面通過ajax加載,用戶界面不顯示。我只是禁用了FireBug,它開始工作令人驚訝!猜測FB在FireBug和Mozilla的FaceBook之間是不明確的。

0
Thanks all this issue is due to 
<form id="fbform"></form> 
<div id="fb-root"></div> is not included before script. you guys can try this code as i wrote. 

div id="fb-root"></div> 
    <script> 
    //initializing API 
    window.fbAsyncInit = function() { 
    FB.init({appId: '298295206936650', status: true, cookie: true, xfbml: true}); 
    }; 
    (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); 
    }()); 
</script> 
<script> 
    //your fb login function 
    function fblogin(action) {alert('dd'); 
     if(action == 'undefined'){ 
      var action = 'fb_login'; 
      } 
     FB.login(function(response) { 
     if (response.authResponse) { 
     console.log('Welcome! Fetching your information.... '); 
     FB.api('/me', function(response) { 
     var user = response; 
     //alert(user.birthday) 
     console.log(response) 
     //alert(user.id+'---'+user.email); 
     var picture_fb='https://graph.facebook.com/'+user.id+'/picture?width=100&height=100'; 
     // alert(picture_fb); 
     if (user.current_location != null) { 
      var city = user.current_location['city']; 
      var country = user.current_location['country']; 
     }else{ 
      var city = ''; 
      var country = ''; 
     } 
     if(action == 'update_fb_pic'){ 

      var email_user= '<?=$this->session->userdata('user_id');?>'; 
      }else{ 

       if(user.email !='' && user.email !=''){ 
        var email_user= user.email; 
       }else{ 
        var email_user= ''; 
       } 
      } 

      $.ajax({ 
      type: 'POST', 
      url: "<?php echo site_url()?>front/ajax_fb_login", 
      data: "action="+action+"&fb_user_id="+user.id+"&username="+user.name+"&username="+user.name+"&first_name="+user.first_name+"&last_name="+user.last_name+"&gender="+user.gender+"&email="+email_user+"&avatar="+picture_fb+"&dob="+user.birthday, 
      success: function(msg){ 
       //alert(msg); 
       //window.parent.document.location.reload(); 
       window.location= "<?php echo site_url()?>profile" 
       //$("#fbform").submit(); 
      } 
      }); 
    }); 
     } else { 
     console.log('User cancelled login or did not fully authorize.'); 
     } 
    }, { scope: 'email,user_birthday,status_update,read_stream,publish_stream'}); 



    } 

</script>