基本上,我正在为我的网站开发Facebook登录流程。这是相当基本的,但给我一些问题。问题似乎是点击观察者只在某些时候工作。硬刷新通常可以解决问题。以下是我用来进入它的JS代码......
function fb_login(login_destination)
{
FB.login(function(response) {
if (response.authResponse) {
var fb_auth_token = response.authResponse.accessToken;
var fb_user_id = response.authResponse.userID;
var url = '/login/ajax/fb_login.php?fb_auth_token=' + fb_auth_token + '&fb_user_id=' + fb_user_id + '&fb_login=' + login_destination;
window.location = url;
}
}, {scope: 'email,user_about_me'});
}
document.observe("dom:loaded", load_fb);
function load_fb()
{
window.fbAsyncInit = function(){
FB.init({
appId : 'ID'
status : true,
cookie : true,
xfbml : true,
oauth : true
});
};
$('fb_connect').observe('click',function(event){
var login_destination = $('fb_connect').getAttribute('dest');
fb_login(login_destination);
});
}
唯一的症状似乎是它不会响应某些网页加载的点击次数。我正在使用的ID直接与图像本身绑定。我很好奇是否有人碰到这个并且知道如何解决它。感谢。
答案 0 :(得分:0)
我之前遇到过这种情况。我最终使用计时器启动初始化脚本作为备份。该函数设置一个变量,如果已经运行则退出。丑陋但有效。
答案 1 :(得分:0)
所以,我最终解决了这个问题。这个代码有效地改为了....
function load_fb()
{
var d = document;
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);
基本上我刚刚等待加载FB JS SDK直到页面加载之后(参考前面的代码才有意义)。它与scriptaculous没有任何关系。