2011-12-20 29 views
1

我想跟蹤Analytics(分析)中Facebook和Unlikes的狀態,但遇到問題。Analytics(分析)Facebook的Javascript問題:「FB未定義」

從Google Analytics文檔here複製的以下代碼不適用於我。

FB.Event.subscribe('edge.create', function(targetUrl) { 
    _gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]); 

}); 

我已經把這些代碼片段在我的網站頁腳但錯誤信息說:「FB沒有定義」,使用Firebug檢查。由於我在我的網站上有一個包含類似按鈕的Facebook框,我認爲FB相關的代碼會被加載,而不是未定義的。

我的facebook-box是iframed。這就是爲什麼它不會工作?我需要做些什麼才能開始在Analtycs的臉書框中跟蹤like按鈕?

回答

2

您需要正確包含FB JS SDK;你展示的只是期望這種整合已經完成的部分。是的,我認爲您以iframe集成形式描述的內容不適用於您找到的示例。

請參閱https://developers.facebook.com/docs/reference/javascript/如何整合JS。鑑於你上面的例子,而我提供的鏈接,我會說你把這個當FB例子說:額外的初始化代碼在這裏

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : 'YOUR_APP_ID', // App ID 
     channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File 
     status  : true, // check login status 
     cookie  : true, // enable cookies to allow the server to access the session 
     xfbml  : true // parse XFBML 
    }); 

    // Additional initialization code here 
    FB.Event.subscribe('edge.create', function(targetUrl) { 
     _gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]);  
    }); 
    }; 

    // Load the SDK Asynchronously 
    (function(d){ 
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    d.getElementsByTagName('head')[0].appendChild(js); 
    }(document)); 
</script> 
0

如果你像我一樣以編程方式添加跟蹤代碼(比如你有GATC母版頁和導出頁面上的類似按鈕),你可以使用下面的代碼:如果您希望以編程方式添加事件處理

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() 
    { 
     // init the FB JS SDK 
     FB.init(
     { 
      appId : 'YOUR_APP_ID', 
      channelUrl : '//WWW.YOUR_DOMAIN.COM', 
      status : true, 
      cookie : true, 
      xfbml : true 
     }); 

     // Add event subscripion here 
     FB.Event.subscribe('edge.create', function (targetUrl) 
     { 
      _gaq.push(['_trackSocial','facebook', 'like', targetUrl]); 
     }); 
    }; 

    // Load the SDK's source Asynchronously 
    (function(d) 
    { 
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     ref.parentNode.insertBefore(js, ref); 
    }(document)); 
</script> 

,正確的解決方法是使用將類似事件訂閱附加到Facebook SDK初始化的window.fbAsyncInit事件。 在下面的代碼中,我使用jQuery在DOM初始化後附加事件訂閱。

$(function() 
{ 
    var exsistingFbAsyncInit = window.fbAsyncInit; 
    if (exsistingFbAsyncInit != null) 
     window.fbAsyncInit = function() 
     { 
      exsistingFbAsyncInit(); 
      FB.Event.subscribe('edge.create', function (targetUrl) 
      { 
       _gaq.push(['_trackSocial','facebook', 'like', targetUrl]); 
      }); 
     }; 
}); 

Tracking Facebook likes with Google Analytics, the real solution!

相關問題