1

使用 Javascript FB.getLoginStatus 的 Facebook 登录在一种情况下有效,而在花药中无效。

这有效:

//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>

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

4

2 回答 2

0

这有效:

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

很难相信这会起作用——因为这不是你在 JavaScript 中定义函数的方式。它缺少函数名称后的圆括号 ()。

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

不,它没有——它可以从任何地方调用。

仅使用将(/可能)创建弹出窗口(FB.login,FB.ui)的方法,通常最好在用户交互(例如单击)时调用它们,因为否则现代浏览器的默认设置的弹出窗口阻止程序可能会抑制弹出窗口。

于 2012-07-22T08:00:23.957 回答
0
<script type="text/javascript"> 
{
    f1()
}
 </script>

删除大括号并添加分号,你应该没问题:

<script type="text/javascript"> 
    f1();
 </script>
于 2012-07-22T01:13:16.580 回答