Facebook 社交插件仅在使用 JQuery 和 .load() 的自定义灯箱中加载一次;
Facebook Social Plugins Only Loading Once Within Custom Lightbox using JQuery and .load();
我正在尝试创建具有社交 link 的灯箱效果(非常类似于您在网站本身上单击 Twitter 个人资料时获得的效果),但我碰壁了。
问题是,当我单击 link 一次时,它加载了我想要的外部页面。
但是当我关闭盒子并重新打开时,它只加载直接 link,而不是插件。
你可以在这里看到早期的演示:http://maenet.co.uk/library/social-lb/exchange.html
我很确定这是一个 fb.xfbml.parse();
问题,但我无法理解它。
exchange.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 未在当前页面中定义。
- 在当前页面加载facebook js-sdk。
- 改用 .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();
});
我正在尝试创建具有社交 link 的灯箱效果(非常类似于您在网站本身上单击 Twitter 个人资料时获得的效果),但我碰壁了。
问题是,当我单击 link 一次时,它加载了我想要的外部页面。
但是当我关闭盒子并重新打开时,它只加载直接 link,而不是插件。
你可以在这里看到早期的演示:http://maenet.co.uk/library/social-lb/exchange.html
我很确定这是一个 fb.xfbml.parse();
问题,但我无法理解它。
exchange.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 未在当前页面中定义。
- 在当前页面加载facebook js-sdk。
- 改用 .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();
});