FB.api 在 FB.init 之后立即调用时不起作用。这是我使用的代码片段:
window.fbAsyncInit = function() {
FB.init({
appId : window.APP_ID,
status : true,
cookie : true,
oauth : true,
channelUrl : window.MASTER_URL + "channel",
frictionlessRequests : true
});
window.COMPANY.init();
};
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
这是我的 COMPANY.init() 和 COMPANY.fetchAllFriends():
friends: new Array(),
init : function() {
// TODO
COMPANY.fetchAllFriends();
FB.Canvas.setSize($(document).height());
FB.Canvas.setAutoGrow();
},
fetchAllFriends : function() {
FB.api('/me/friends', function(response) {
if (!response || response.error) {
return;
}
COMPANY.friends = new Array();
$.each(response.data, function(index, value) {
COMPANY.friends.push(value.id);
});
});
},
在 fetchAllFriends 的响应中包含错误,指出“必须使用事件访问 token 来查询有关当前用户的信息。”。我确保(通过浏览器调试器)在调用 FB.api 之前调用了 FB.init。
任何帮助将不胜感激!
最佳答案
好的,我解决了我的问题。我改变了:
window.fbAsyncInit = function() {
FB.init({
appId : window.APP_ID,
status : true,
cookie : true,
oauth : true,
channelUrl : window.MASTER_URL + "channel",
frictionlessRequests : true
});
window.COMPANY.init();
};
到:
window.fbAsyncInit = function() {
FB.init({
appId : window.APP_ID,
status : true,
cookie : true,
oauth : true,
channelUrl : window.MASTER_URL + "channel",
frictionlessRequests : true
});
FB.Event.subscribe('auth.login', window.COMPANY.init);
};
以防其他人想知道。我发现当 FB.init 返回时 FB JS SDK 还没有形成用户 session ,所以你需要做的是用你的 init 函数订阅 'auth.login' 事件。更多信息 here
关于javascript - 在 FB.init 之后立即调用时,FB.api 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8494280/