2011-03-27 74 views
2

我有這樣的代碼。Facebook喜歡框加載事件jquery

$(document).ready(function() { 
    var highestCol = Math.max($('#main').children().height(),$('#main').children().height()); 
    $('#main').children().height(highestCol); 
}); 

但是,當我在某個列中有「喜歡」框時,這不起作用。它似乎在Facebook之前被稱爲「盒子」。

如何解決這個問題?

基本上我需要在facebook加載後調用這個過程就像框和建議塊(都)。

+0

老兄,你是給同樣的事情兩次'Math.max',同樣的事情設置到其自身,它在本質上感覺就像'高度= MAX(身高,身高)',它本身,對我來說毫無意義......我在這裏錯過了什麼? – 2011-03-27 12:59:45

+0

哦。真。這一點並不重要。重要的是當Likebox和Recommendations完全加載時調用函數。 – 2011-03-27 13:22:15

回答

2

我想你可以把類似按鈕放在一個固定高度的容器中。

例如:

<div style="height: 62px;"> 
<fb:like-box href="http://www.facebook.com/platform" width="292" show_faces="false" stream="false" header="false"></fb:like-box> 
</div> 

那麼你就不會擔心它究竟是如何高度。

另一種可能的解決方案。 我想你使用的是異步加載facebook javascrpt sdk的方法。然後,你可以執行你FB.init後()代碼

<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
    FB.init({appId: 'your app id', status: true, cookie: true, xfbml: true}); 

    if (jQuery.isFunction(window.fbexecute)) { 
     window.fbexecute(); 
    } 
    }; 
    (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> 

var fbexecute = function() { 
    var highestCol = Math.max($('#main').children().height(),$('#main').children().height()); 
    $('#main').children().height(highestCol); 
} 
+1

這個解決方案在我的情況下不起作用。我會發布我的解決方案。 – Tillito 2013-10-10 12:12:24

-1
$(document).ready(function() 
{ 
    var highestCol = Math.max($('#main').children().height(),$('#main').children().height()); 
    $('#main').children().height(highestCol); 
}); 
+1

這不是解決方案:當document.ready被調用時,Facebook框不存在。因此你不能在這裏計算高度。 – Tillito 2013-10-10 11:48:48

3

執行代碼的Facebook的插件已經呈現後,您可以訂閱xfbml.render。這是我的工作代碼:

window.fbAsyncInit = function() { 

    FB.init({ status: true, cookie: true, xfbml: true }); 

    FB.Event.subscribe("xfbml.render", function() { 
     fbexecute(); 
    }); 
}; 

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

var fbexecute = function() { 
    //-- re-calculate heights here 
} 
+0

Edison發佈的解決方案無效。當fbexecute被調用時,facebook插件還沒有呈現。這指出我正確的方向:http://stackoverflow.com/questions/7297619/how-to-load-a-function-method-after-facebook-social-plugin-is-has-finished-loade – Tillito 2013-10-10 12:15:58

0

按照該FB.Event.subscribe,還有它會自動在頁面將完成渲染插件

觸發加載事件

第1步:在HTML(放它在希望社會框中顯示):

<div class="fb-page" data-href="https://www.facebook.com/facebook" data-small-header="true" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"><div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/facebook"><a href="https://www.facebook.com/facebook">Facebook</a></blockquote></div></div> 

步驟2:在頁腳(剛結束<body>標記之前) :

<div id="fb-root"></div> 
<script> 
window.fbAsyncInit = function(){ 
    //FB.init({ status: false, cookie: true, xfbml: true }); 
    FB.Event.subscribe("xfbml.render", function(){ 
     columnHeightFixer(); 
    }); 
}; 
(function(d, s, id){ 
var js, fjs = d.getElementsByTagName(s)[0]; 
if (d.getElementById(id)) return; 
js = d.createElement(s); js.id = id; 
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.8"; 
fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 

function columnHeightFixer(){ 
    //...Height Fixing Code... 
} 
</script>