javascript - Facebook 社交插件仅使用 JQuery 和 .load() 在自定义 Lightbox 中加载一次;

标签 javascript jquery html facebook facebook-graph-api

我正在尝试使用社交链接创建灯箱效果(与单击网站本身上的 Twitter 个人资料时获得的效果非常相似),但我遇到了困难。

问题是,当我单击链接一次时,它会按照我想要的方式加载外部页面。

但是当我关闭盒子并重新打开时,它只加载直接链接,而不是插件。

您可以在此处查看早期演示:http://maenet.co.uk/library/social-lb/exchange.html

我非常确定这是一个 fb.xfbml.parse(); 问题,但我就是无法理解它。

交换.html

<div id="fb-btn">
<p id="fb-1">Click Here</p>
</div>

<div class="display" id="social-facebook"></div>

<style>
html, body {height: 100%;}
.display {display: none;position: fixed;top: 0;left: 0;text-align: center;background: rgba(0,0,0,1);width: 100%;height: 100%;color: white;}
</style>

<script>

$('#fb-1').click(function(){
    $('.display').html('<div class="fb">Please Wait</div>');
    $('.display').show();
    $('.display > div').load('fb-1.html');
    FB.XFBML.parse(document.getElementById('social-facebook'));
});

$('.display').click(function(){
    $('.display > div').css('display','none');
    $('.display').css('display','none');
});

</script>

常规FB嵌入编码位于fb-1.html

<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_GB/sdk.js#xfbml=1&version=v2.3&appId=209038619141340";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<div class="fb-page" data-href="https://www.facebook.com/pages/Cheese-Sandwiches/31745757555?fref=ts" data-width="500" data-hide-cover="false" data-show-facepile="true" data-show-posts="true"><div class="fb-xfbml-parse-ignore"><blockquote cite="https://www.facebook.com/pages/Cheese-Sandwiches/31745757555?fref=ts"><a href="https://www.facebook.com/pages/Cheese-Sandwiches/31745757555?fref=ts">Cheese Sandwiches</a></blockquote></div></div>

因此,如果您对如何解决这个问题有任何想法,我将永远感激不已

祝你有美好的一天:)

最佳答案

发生这种情况是因为当前页面中未定义 FB。

  1. 在当前页面加载facebook js-sdk。
  2. 使用 .load 的回调函数相反(如下所示)。这将确保请求的页面加载完成,然后执行解析。
<小时/>
$('.display > div').load('fb-1.html', function(){
  FB.XFBML.parse(document.getElementById('social-facebook'));
});

我测试了这种方法,它似乎有效。

希望这有帮助。

PS:你可以像这样改进代码

$('.display').click(function(){
    $('.display > div').hide(); // I don't understand why you're doing this because in the next line the parent itself is being hidden anyways
    $(this).hide();
});

关于javascript - Facebook 社交插件仅使用 JQuery 和 .load() 在自定义 Lightbox 中加载一次;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29714446/

相关文章:

css - 容器 div 内的 3 div 不允许换行

javascript - Mongodb/mongoose 只保存一次然后创建 500 错误

javascript - 如何以编程方式打开我的 Accordion 菜单

javascript - 如何处理 props 和 states 以避免无限循环?

javascript - 使新元素匹配幻灯片 ui 设置

javascript - 创建带有文本的按钮元素

php echo 中的 alt 中的 Php 字符串

javascript - 如何将一个 anchor 的href链接复制到其他 anchor ?

javascript - typescript 从其他属性的类型推断 prop 类型

javascript - jQuery .selectable(),总是返回相同的ID?