Jquery - Facebook像按钮,异步脚本标签动态加载未初始化两次

时间:2013-03-19 13:34:49

标签: jquery facebook asynchronous initialization

我正在使用异步脚本从Facebook加载技术,在动态上显示一个类似于按钮加载ajax页面的按钮。我第一次加载网站时,Button会正确显示..

..但是如果我用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;
};

当我从每个导航的网站之间加载了holdslikebutton.php时,为什么脚本不会被初始化。有什么东西我需要做什么来触发all.js的执行?但是,为什么它会在外部使用browser-url或浏览器重新加载来加载网站。

这并不复杂。也许我会监督一些事情?我很困惑,并且很乐意为每个想法解决这个问题。

1 个答案:

答案 0 :(得分:1)

只有初始化SDK时,才会对DOM中的元素进行FB插件的渲染。

要重新解析DOM(或其中的部分),需要使用FB.XFBML.parse来完成新的插件标记。

(在此之前多次讨论过......)