0

私は Facebook からの非同期スクリプト読み込み技術を使用して、コンテナが読み込まれた ajax ページにダイナミックにいいねボタンを表示しています。初めてサイトをロードすると、ボタンが正しく表示されます..

..しかし、html('')を使用して親コンテナからページをアンロードし、同じ方法で再度ロードすると、いいねボタンはもう初期化されません。Firebug は、スクリプトが正しい div にロードされたが実行されなかったことを示しています。

次のようなボタンを保持しているサブページを読み込みます (ini とサイト ナビゲーションでも同じです)。

$.ajax({
    url: url+'holdslikebutton.php?rnd='+Math.random()+'&ajax=yes',
    //cache: false,
    success: function(data) {
        showFBButton();
    }
});

いいねボタンのスクリプトは次のようになります。

function showFBButton() {
    var html =
        '<div id="fb-button">'
        + '<div class="fb-like" data-href="https://www.facebook.com/xxx" data-send="false" data-layout="button_count" data-width="70" data-show-faces="false" data-action="like"></div>'
        + '<div id="fb-root"></div>'
        + '</div>';
    $('#fb-viewport').html(html);
    window.setTimeout( function () {
        var e = document.createElement( 'script' );
        e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/'+fblang+'/all.js#'+Math.random()+'&xfbml=1&appId=xxx';
        document.getElementById( 'fb-root' ).appendChild( e );
        document.getElementById( 'fb-button' ).removeAttribute( 'class' );
    }, 2000 );
return true;
};

ナビゲーションごとにサイトの間から holdlikebutton.php をロードすると、スクリプトが初期化されないのはなぜですか。all.js の実行をトリガーするために必要なことはありますか? しかし、なぜそれは browser-url または browser reload を使用してサイトを外部からロードすることに取り組んでいるのでしょうか。

複雑ではありません。たぶん私は何かを監督していますか?私は立ち往生しており、この問題を解決する方法を考えていただければ幸いです。

4

1 に答える 1

1

FBプラグインのレンダリングは、SDKが初期化されたときにDOMにある要素に対してのみ発生します。

新しいプラグインタグのDOM(またはその一部)を再解析するには、FB.XFBML.parseを使用して実行する必要があります。

(前にここで何度も議論されました…)

于 2013-03-19T15:06:38.020 に答える