0

重複の可能性:
jqueryとajaxを使用してFacebookメタタグを追加します

私のウェブサイトには、グリッド上に配置された一連のアイテムがあります。アイテムをクリックすると、AJAXを介してその詳細がロードされます。詳細ビューには、製品のタイトル、写真、説明があります。

このビューでは、「いいね」ボタンが必要です。もちろん、AJAXを介してロードされたコンテンツで「いいね」をトリガーする必要があります。(注:このコンテンツはAJAXなしでもアクセスできます)

共有するタイトルと画像を指定する必要がない場合、これは簡単です。詳細ビューに、href属性に適切な値を持つfb:likeタグを含めるだけです。

ただし、OpenGraphタグを使用して指定される画像とタイトルも必要です。

これらのタグは、クリックされたアイテムに応じて異なる値を持つ必要があります。

これは私が試した解決策です:

  • ドキュメントと同様に、JS SDKはホームページに非同期で読み込まれ、そこでFB.initも呼び出されます(parse:falseを使用
  • ヘッドには、ホームページに適切なタイトルURL、および画像値を持つOGタグが含まれています
  • 商品の詳細がAJAXを介して読み込まれる場合、商品を参照する値を与えるためにogタグを更新するJS(以下のコードスニペットを参照)を応答に含めます。
    • 最後に、FB.XFBML.parse()を呼び出します

私が得た結果は、 FB.XFBML.parse()が呼び出されるに、のOGタグが完全に更新されることです。ただし、「いいね」ボタンを押すと、FB.init呼び出しがOGタグの以前の値を保持し、JSを介して設定した現在の値を無視するかのように、ホームページに「いいね」が作成されます。

私はこことGoogleの両方で多くの質問を一般的に調べましたが、驚くべきことに、これに似たケースを見つけることができませんでした。

これがFB.initへの私の呼び出しです

  window.fbAsyncInit = function() {
    // init the FB JS SDK
    FB.init({
      channelUrl : '*correct value hidden for privacy*', // Channel File for x-domain communication
      status     : true,
      cookie     : true,
      xfbml      : false  // I want to parse them once the OG tags are properly set
    });

    // No additional code after init in my case
  };

これは、挿入するHTMLの直後にAJAX応答に挿入したJSです。

<script type="text/javascript">
    og_tags( <?php echo CJavaScript::encode( $this->shareData() ); ?> );        
    $(document).ready( function() {
        FB.XFBML.parse();
    });
</script>

関数の定義は次のとおりです

function og_tags( params ) {
    var head = $('head');
    for ( var p in params )
        place_og_tag( { 'name' : p, 'value' : params[p] }, head );
}

function place_og_tag( opts, head ) {
    var name = "og:" + opts.name;
    var $tag = $( 'meta[property="' + name + '"]', head );
    if ( $tag.length == 0 )
        head.append( $('<meta property="' + name + '" content="' + opts.value + '" />') );
    else
        $tag.attr('content', opts.value );
}

私はこれに何日も苦労してきたので、助けてくれて本当にありがたいです。どうもありがとう!

4

0 に答える 0