分析Facebook Javascript问题:“FB未定义”

时间:2011-12-20 11:57:29

标签: javascript facebook facebook-javascript-sdk

我想在Google Analytics中跟踪Facebook喜欢和不喜欢的状态但是我遇到了问题。

从Google Analytics文档here复制的以下代码对我不起作用。

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

});

我已将该代码段放在我的网站页脚中,但错误消息显示:“FB未定义”,使用Firebug进行检查。由于我的网站上有一个包含类似按钮的facebook-box,我认为FB相关代码将被加载而不是未定义。

我拥有的facebook-box是iframed。这就是为什么它不会工作?在Analtycs的facebook框中开始跟踪喜欢按钮我需要做什么?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>

如果要以编程方式添加事件处理程序,正确的解决方案是使用window.fbAsyncInit事件将类似事件订阅附加到Facebook SDK初始化。 在下面的代码中,我使用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!