2011-07-25 16 views
4

ユーザーがlikeボタンをクリックしたときに、何らかのイベント処理を実行しようとしています。FB.Event.subscribeが特定のイベントに対して起動しない

私のFacebookのボタンを経由して非同期的に作成されている:

(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); 
}()); 

そして、それは素晴らしい作品。

は、私は次の関数が同様に実行されている:私は、ページをロードする際

window.fbAsyncInit = function() { 
    FB.init({status: true, cookie: true, xfbml: true}); 
    FB.Event.subscribe("xfbml.render", function() { 
     console.log('xfbml.render'); 
     FB.Event.subscribe("edge.create", function(targetUrl) { 
      console.log('edge.create'); 
     }); 
     FB.Event.subscribe("edge.remove", function(targetUrl) { 
      console.log('edge.remove'); 
     }); 
    }); 
}; 

これまでのところ、私はコンソールで「xfbml.render」を取得します。その後、私は何も得られないようなボタン&をクリックします。

私は、コンソールメッセージ 'edge.create'を吐き出すことを望みます。

これを引き起こす原因は何ですか?

私はこのページを公にアクセス可能なサイトに置いています(これは現在、私の開発リグにあります)&まだ動作しませんでした。私は要求があればもう一度できます。

答えて

8

WebページでXFBMLを使用するには、ページのルート要素にXML名前空間属性を追加する必要があります。この宣言がなければ、XFBMLタグはInternet Explorerでレンダリングされません。

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="https://www.facebook.com/2008/fbml"> 

次に、 あなたは、標準的な要素を使用して(FB.initを())を呼び出すSDKをロードします。文書内にfb-rootという名前の要素も指定する必要があります。

<div id="fb-root"></div> 

、その後、アプリIDがFB.init()関数内で追加してください、

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 
    }); 

はここで完全に動作するコードです:

<!doctype html> 
<html lang="en" xmlns:fb="https://www.facebook.com/2008/fbml"> 
<head> 
    <meta charset="utf-8"> 
    <title>Facebook Like Button</title> 
</head> 
<body> 
<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
    FB.init({appId: 'YOUR_APP_ID', status: true, cookie: true,xfbml: true}); 
    FB.Event.subscribe("edge.create", function(targetUrl) { 
     console.log('edge.create'); 
    }); 
    FB.Event.subscribe("edge.remove", function(targetUrl) { 
     console.log('edge.remove'); 
    }); 
    }; 
    (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> 
<fb:like></fb:like> 
</body> 
</html> 
+0

それはAppIdの部分だった。私たちのウェブサイトはクライアントごとに動的に生成されており、それらのすべてのためにappIdを設定することはできないので、私はそれを使わないことを望んでいました。しかし、これは確かに私の質問に答える。ありがとうございました! –

+0

アプリIDを追加しないとJS SDKが動作しません。とにかくうれしいです –

4

ただ、今後の参考のために:使用済みいくつかの時間iframeのボタンの火災イベントをしようとしている - 運がいいが、xfbml FB.Event.subscribe("edge.create", f);でうまく動作します。

関連する問題