2015-01-11 33 views
1

顯然,有些人對使用Facebook插件的網站感到不滿意,因爲他們不想跟蹤他們不在Facebook上的行爲。有Shariff,這看起來像一個公平的方法:Facebook用戶點擊Facebook按鈕(這裏是demo)之前,不會加載Facebook插件。點擊加載Facebook SDK

我想要做同樣的事情(使用JavaScript的SDK)。但是,我公然無法動態加載SDK。我也沒有收到任何錯誤消息(是的,我插入了應用程序ID)。

任何想法?下面的代碼取自API docs

<html> 
<body> 

<script type="text/javascript"> 
    window.onload = function() { 
     var e = document.getElementById('share_on_fb_link'); 
     e.onclick = share_on_fb; 

     function share_on_fb() { 
      // Code from https://developers.facebook.com/docs/javascript/quickstart/v2.2 

      // Basic Setup 
      window.fbAsyncInit = function() { 
       FB.init({ 
        appId  : 'your-app-id', 
        xfbml  : true, 
        version : 'v2.1' 
       }); 
      }; 

      (function(d, s, id){ 
       var js, fjs = d.getElementsByTagName(s)[0]; 
       if (d.getElementById(id)) {return;} 
       js = d.createElement(s); js.id = id; 
       js.src = "//connect.facebook.net/en_US/sdk.js"; 
       fjs.parentNode.insertBefore(js, fjs); 
      }(document, 'script', 'facebook-jssdk')); 

      // Using the SDK to trigger a Share dialog 
      FB.ui({ 
       method: 'share', 
       href: 'https://developers.facebook.com/docs/' 
      }, function(response){}); 

      return false; 
     } 
    } 
</script> 

<a id="share_on_fb_link" href="#">Link</a> 

</body> 
</html> 
+0

我想做一個非常類似的事情。它也不適合我,但我確定你應該將FB.ui調用移動到fbAsyncInit回調函數中。網站備註:據我所見,Shariff不使用Facebook SDK,它只是在彈出窗口中打開sharer.php。 – lacco

回答

1

我終於想出了一個工作解決方案。首先,您必須在FB.init之後致電FB.ui。但根據https://stackoverflow.com/a/3549043/745266這不會完全解決問題 - FB.init正在對Facebook進行異步請求,所以調用FB.ui必須推遲到Facebook完全設置。下面的代碼應該工作:

window.onload = function() { 
    var e = document.getElementById('share_on_fb_link'); 
    e.onclick = share_on_fb; 

    function share_on_fb() { 
     // Code from https://developers.facebook.com/docs/javascript/quickstart/v2.2 

     // Basic Setup 
     window.fbAsyncInit = function() { 
      FB.init({ 
       appId  : 'your-app-id', 
       xfbml  : true, 
       version : 'v2.1' 
      }); 

      // Delay FB.ui code until Facebook is fully initialized 
      FB.getLoginStatus(function(response){ 
       // Using the SDK to trigger a Share dialog 
       FB.ui({ 
        method: 'share', 
        href: 'https://developers.facebook.com/docs/' 
       }, function(response){}); 
      }); 
     }; 

     (function(d, s, id){ 
      var js, fjs = d.getElementsByTagName(s)[0]; 
      if (d.getElementById(id)) {return;} 
      js = d.createElement(s); js.id = id; 
      js.src = "//connect.facebook.net/en_US/sdk.js"; 
      fjs.parentNode.insertBefore(js, fjs); 
     }(document, 'script', 'facebook-jssdk')); 

     return false; 
    } 
}