2012-09-15 66 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。