我已经成功诊断并解决了这个问题。
这是我异步加载 Facebook JavaScript SDK 的代码:
(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'));
这是我初始化它的代码:
FB.init({
appId: {APP_ID},
status: true,
cookie: true,
xfbml: true,
oauth: true
});
请注意,我实际上已经请求过两次 XFBML 解析:一次是在加载 JavaScript SDK 时 ( #xfbml=1
),另一次是在初始化它时 ( xfbml: true
)。
这会导致阻止comment-count
标签呈现的错误。
决议是取消这两项声明中的一项;我建议#xfbml=1
从 JavaScript SDK URL 的末尾删除,因为在加载时请求 XFBML 解析似乎已被弃用。
我的装载机现在看起来像这样:
(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";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
一切都很完美。
同步加载
如果您同步加载 JavaScript SDK,请更改:
<script src="//connect.facebook.net/en_US/all.js#xfbml=1"></script>
对此:
<script src="//connect.facebook.net/en_US/all.js"></script>