我试图发布到facebook新闻源并且弹出框不会不时出现。 我认为这与回发或其他东西有关。 这是怎么回事: 用户再见一些东西,然后在弹出窗口中发送给Payson(payson是瑞典版的Paypal),然后payson将用户发送回我的页面仍然在弹出窗口中。 这是一个运行的代码:
function postToFeed() {
try {
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
var obj = {
method: 'feed',
link: 'link',
picture: 'imagelink',
name: 'title',
caption: 'some text...',
description: 'some text...',
redirect_uri: 'url'
};
function callback(response) {
document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
}
FB.ui(obj, callback);
}
else {
alert("not connected")
}
});
} catch (e) {
alert(e.Message)
}
}
现在发生的是我从try catch中得到错误,而且只是说 FB未定义。
如果我之后使用按钮运行此功能,它的工作正常。 如果我伪造来自payson的回发它也可以工作,但如果我在新窗口中这样做则不行。
我试图将FB.init函数放在我的函数中,但这没有帮助。
感谢您的帮助!
新代码
这是在.js文件中
var isLoaded = false;
window.fbAsyncInit = function () {
FB.init({
appId: '00000000', // App ID
channelUrl: 'url', // Channel File
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
xfbml: true, // parse XFBML
oauth: true // enable OAuth
});
isLoaded = true;
};
// Load the SDK Asynchronously
(function (d) {
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) { return; }
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
} (document));
(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/sv_SE/all.js#xfbml=1&appId=503537396325197";
fjs.parentNode.insertBefore(js, fjs);
} (document, 'script', 'facebook-jssdk'));
FB.init({ appId: "000", status: true, cookie: true });
function postToFeed() {
var obj = {
display: 'iframe',
method: 'feed',
link: 'url',
picture: 'url',
name: 'text',
caption: 'text',
description: 'text',
redirect_uri: 'url'
};
function callback(response) {
document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
}
FB.ui(obj, callback);
}
function init() {
FB.init({
appId: '00000',
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
xfbml: true, // parse XFBML
channelUrl: 'url', // custom channel
oauth: true // enable OAuth
});
FB.getLoginStatus(function (response) {
if (response.status == 'connected') {
var user_id = response.authResponse.userID;
var access_token = response.authResponse.accessToken
var page_id = "00000"; //page id
var fql_query = "SELECT uid FROM page_fan WHERE page_id =" + page_id + " and uid=" + user_id;
var the_query = FB.Data.query(fql_query);
the_query.wait(function (rows) {
if (rows.length == 1 && rows[0].uid == user_id) {
$("#container").show();
$("#container_notlike").hide();
$("#notloggedin").hide();
}
else {
$("#container_notlike").show();
$("#container").hide();
$("#notloggedin").hide();
login();
}
});
} else {
$("#container_notlike").hide();
$("#container").hide();
login();
}
});
}
init();
// whenever the user logs in, we refresh the page
FB.Event.subscribe('auth.login', function (response) {
top.location.href = "url";
});
FB.Event.subscribe('auth.logout', function (response) {
top.location.href = "url";
});
function login() {
FB.login(function (response) {
if (response.authResponse) {
console.log('Logged in');
} else {
console.log('User cancelled login or did not fully authorize.');
}
}, { scope: 'email,user_likes,publish_actions' });
}
function likereload() {
FB.Event.subscribe('edge.create', function (response) {
top.location.href = "url"
});
}
function getuserinfo() {
FB.getLoginStatus(function (response) {
if (response.authResponse) {
FB.api('/me', function (response) {
document.getElementById("txtfName").value = response.first_name;
document.getElementById("txtlName").value = response.last_name;
document.getElementById("txtemail").value = response.email;
});
}
});
}
答案 0 :(得分:0)
“FB未定义”表示您未加载/初始化JavaScript SDK。
有关如何使用JavaScript SDK的示例,请参阅“加载和初始化”,不要在自定义函数中添加任何内容。
此外,您不需要“getLoginStatus”,Feed对话框也可以在没有用户登录的情况下工作,因此调用“getLoginStatus”是没有意义的,只需要时间。我也会删除try / catch块,你不需要它。
答案 1 :(得分:0)
我解决了这个问题,
window.setTimeout('postToFeed()', 3000);
然后在我调出Feed对话框之前,所有的Facebook代码都有时间加载