2012-09-15 89 views
1

我想設置一個模式內的Facebook像按鈕,我想OG元是特定於模態內的每個圖像。在我的劇本我第一次添加所需的OG meta標籤:Facebook的按鈕動態元標籤(jQuery)

/* INSERT OPEN GRAPH META TAGS */ 
$('head').append('<meta property="og:title" content="'+x+'"/> 
    <meta property="og:url" content="'+window.location.href+'"/> 
    <meta property="og:description" content="'+z+'"/> 
'); 

我檢查了這一點,他們加入就好了,在這一點上FB尚未初始化或已調用。只有某些模式具有社交圖標,因此打開模式時,圖像會加載,如果需要社交圖標,則會運行以下代碼並根據元素的某些數據屬性動態更新OG中繼標記:

$('meta[property="og:title"]').attr('content',currentImageParent.data('MetaTitle')); 

$('meta[property="og:description"]').attr('content',currentImageParent.data('MetaDescription')); 

這工作得很好,我可以看到更新發生在代碼中。因此,在圖像加載到模式後,meta標籤已根據圖像的.data信息更新,我認爲可以安全地調用Facebook SDK來設置like/send按鈕(並添加所需的DIV到如果它不存在的頁面):

$('body').prepend('<div id="fb-root" class="FacebookSDK"></div> 
    <script> 
    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/all.js#xfbml=1";  
     fjs.parentNode.insertBefore(js,fjs); 
    }(document,\'script\',\'facebook-jssdk\')); 
    </script> 
'); 

在調試程序,這並不工作,只是默認爲不OG meta標籤(標題/描述)。它還會引發錯誤,指出og:url等未定義(即使它們在調用之前已添加)。如果我在html頁面上放置虛擬OG元標記並運行調試程序,則不會顯示任何錯誤,並且會顯示OG元標記內容(不是動態更新的內容,只是虛擬內容文本)。

任何想法?謝謝!

+0

忘了提及FB調試器中顯示的url/links在兩種情況下都是相同的 – Aaron

回答

0

Facebook的刮板不執行Javascript,因此只能在任何Javascript(或jQuery)執行前閱讀HTML中可用的元標籤。

您必須爲每個Open Graph對象具有唯一的URL。