2013-09-20 2 views
0

Я работаю над проектом, в котором вы можете посмотреть несколько кодов вложений от Facebook, Twitter, Pinterest и т. Д. Я загружаю коды встраивания через ajax. Но у меня возникают проблемы с кодом встраивания facebook. Facebook имеет очень запутанную систему встраивания. Обычный код встраивания состоит из 2 частей; часть скрипта и встроенная часть.Facebook Embed Behaves Strange

Сценарий Часть

<div id="fb-root"></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> 

Вставить часть

<div class="fb-post" data-href="https://www.facebook.com/photo.php?fbid=667590506599208&amp;set=a.155534741138123.32906.153667584658172&amp;type=1" data-width="550"> 
<div class="fb-xfbml-parse-ignore"> 
<a href="https://www.facebook.com/photo.php?fbid=667590506599208&amp;set=a.155534741138123.32906.153667584658172&amp;type=1">Post</a> by <a href="https://www.facebook.com/cumhuriyetgzt">Cumhuriyet Gazetesi</a>. 
</div> 
</div> 

Я включил часть сценария между тегами головы. Как я уже сказал, я загружаю коды встраивать с помощью AJAX, и когда я делаю, я также загрузить этот

<script type="text/javascript"> FB.XFBML.parse(); </script> 

код так, что Facebook может встраивает повторную обработку. Проблема у меня есть; на странице load facebook embed коды не работают (даже если они загружаются с помощью ajax). Когда я перезагружаю коды вставки (кнопка перезагрузки, которая запускает загрузку ajax), они работают. Иногда они не работают, когда на одной и той же странице есть коды для twitter или pinterest.

У любого есть идея, что может быть? Где и как включить скрипты и код повторной обработки?

Благодаря

Edit: Я имею в виду проблему может быть о порядке загрузки. Поэтому, если загрузка скриптов после загрузки элемента DOM, это не повлияет на код встраивания. Может быть, если я убеждаюсь, что загружаю скрипты ПЕРЕД загрузкой страницы, она будет работать. Просто идея ...

ответ

0

Добавить ниже FB javascript в любом месте вашего javascript-файла.

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

И тогда

window.fbAsyncInit = function() { 

      FB.XFBML.parse(); 
      } 

Вызов функции выше 2 или 3 секунды после FB встроенного контента загружается.

setTimeout(function() { 
    if (typeof(FB) != 'undefined') { 

     window.fbAsyncInit(); 

     } 
     }, 2000) 
+0

Вы не должны полагаться на таймаут - вы не знаете, сколько времени потребуется для загрузки SDK в сеть. Использовать встроенные события – slang