尝试在点击事件上发布到Facebook并获取FB未定义的错误。下面是代码。如何在FB方法之外使用Fb。我研究并发现FB是异步初始化的,这意味着它可以在文档准备好之前或之后加载。如何修复我的代码,以便我可以在需要时调用FB变量并将其初始化。
{{1}}
答案 0 :(得分:0)
使用以下代码。如果在文档准备就绪时加载了facebook,则初始化FB;另一方面,设置加载facebook时使用的fbAsyncInit函数。如果愿意,可以将getLoginStatus调用包装在循环中。这个答案是使用以下来源Working with asynchronously loaded javascript
开发的<!DOCTYPE HTML>
<html>
<head>
<title></title>
<script src="jquery-1.11.1.min.js"></script>
</head>
<body>
<input type="text" id="message" />
<input type="button" id="send" value="Send" />
<script>
$(document).ready(function(){
function facebookReady() {
FB.init({
appId : '1521775134725984',
xfbml : true,
status : true,
cookie : true,
version : 'v2.1'
});
$(document).trigger("facebook:ready");
}
if(window.FB) {
facebookReady();
} else {
window.fbAsyncInit = facebookReady;
}
});
$(document).on("facebook:ready", function() {
$("#send").on("click", function() {
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
var body = $("#message").val();
FB.api('/me/feed', 'post', { message: body }, function(response) {
if (!response || response.error) {
alert('Error occured');
} else {
alert('Post ID: ' + response.id);
}
});
}
else {
FB.login(function(){
}, {scope: 'publish_actions'});
}
});
});
});
(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/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
</body>
</html>