2012-07-22 41 views
1

使用JavaScript登录Facebook使用FB.getLoginStatus在一种情况下工作,在另一种情况下不起作用。Facebook与JavaScript集成RoR不起作用

这工作:

//view 
<script type="text/javascript"> 
function f1() { 
FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
    // the user is logged in and has authenticated your 
    // app, and response.authResponse supplies 
    // the user's ID, a valid access token, a signed 
    // request, and the time the access token 
    // and signed request each expire 
    FB.api('/me', function(response) { 
     alert(response.name + " " + response.id); 
     name1 = response.name; 
     uid1 = response.id; 
    }); 
    // var uid = response.authResponse.userID; 
    // var accessToken = response.authResponse.accessToken; 
    } else if (response.status === 'not_authorized') { 
    // the user is logged in to Facebook, 
    // but has not authenticated your app 
    } else { 
    // the user isn't logged in to Facebook. 
    } 
}); 
} 
</script> 

<%= content_for :body_attributes, "onload='f1();'" %> 

这不起作用

// view 
<script type="text/javascript"> 
function f1() { 
    // same definition as above 
    } 
</script> 

<script type="text/javascript"> { 
f1() 
    } 
</script> 

我不明白,为什么第二个代码不起作用。谢谢!

回答

0
<script type="text/javascript"> 
{ 
    f1() 
} 
</script> 

删除括号并添加一个分号,你应该确定:

<script type="text/javascript"> 
    f1(); 
</script> 
+0

谢谢李。它仍然不起作用 – user1388066 2012-07-22 01:39:39

+0

好的。当你说它不起作用时,你是什么意思?你有错误吗?你看了控制台吗? – 2012-07-22 01:41:37

+0

alert()语句不显示变量:name1和uid1 – user1388066 2012-07-22 02:32:40

0

这工作:

//view 
<script type="text/javascript"> 
function f1 { 
FB.getLoginStatus(function(response) { 

很难相信,这应该工作 - 因为这是而不是你如何在JavaScript中定义一个函数。它缺少函数名称后面的圆括号()。

[来自评论] FB.api是不是必须被事件触发?

不,它不 - 它可以从任何地方调用。

只需要(/可能会)创建一个弹出窗口(FB.login,FB.ui)的方法,通常最好是在用户交互(如点击)上调用它们,因为否则现代浏览器的弹出窗口阻止程序将使用默认设置可能会压制弹出窗口。

+0

谢谢@CBroe的帮助。函数定义是上述代码中的错字,但不是我的工作版本。对不起。我做了编辑。FB.api调用在第二种情况下不起作用。我似乎记得在某个地方阅读它必须被触发。再次感谢! – user1388066 2012-07-22 13:00:22

+0

重读您的评论@CBroe,您是否在说弹出窗口拦截器可能会负责案件2的行为?即使弹出窗口不涉及。谢谢! – user1388066 2012-07-22 13:25:04

+0

未来请小心处理您的问题描述,因为它有助于避免我们刚刚做的事情发生偏离。也就是说,JS SDK甚至可以在第二种情况下正确加载和初始化,在那个地方你可以调用你的函数...? – CBroe 2012-07-22 14:01:50