所以我有fb api初始化
window.fbAsyncInit = function() {
FB.init({
appId : '351808841561163',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
oauth: true
});
我有一个单独的带有函数的js文件:
function example(){
FB.api(
'/me/[namespace]:visit',
'post',
{ channel: link},
function(response) {
if (!response || response.error) {
console.log(response.error);
} else {
console.log('Follow was success! Action ID: ' + response);
}
});
}
当我打电话给我时,我的FB是未定义的。
当我把函数放在window.fbAsyncInit中时,它可以正常工作,但我需要在window.fbAsyncInit之外调用FB。
如果有可能的方法吗?
答案 0 :(得分:12)
将您的函数排队,然后在FB初始化后立即调用它。以下代码保证您的函数将按正确顺序调用,并在FB完成初始化后立即调用
在您的示例之前和FB init脚本之前包含的帮助程序脚本:
var FB; // to avoid error "undeclared variable", until FB got initialized
var myQueue = new Array();
function queueAdd(f){
if (FB == undefined)
myQueue.push(f);
else
f();
}
function processQueue(){
var f;
while(f = myQueue.shift())
f();
}
你的功能范例:
function example(){
FB.api(
'/me/[namespace]:visit',
'post',
{ channel: link},
function(response) {
if (!response || response.error) {
console.log(response.error);
} else {
console.log('Follow was success! Action ID: ' + response);
}
});
}
queueAdd(example); // will run immediately if FB initialized. Otherwise, wait for FB first
和FB部分:
window.fbAsyncInit = function() {
FB.init(blablabla);
processQueue();
}