登录按钮在IE7,8,9上不起作用

时间:2012-05-11 23:34:20

标签: javascript facebook internet-explorer login

这是我的第一个应用。登录按钮不适用于我的应用程序。它会显示,但是当我点击它时,没有任何反应。

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  <html xmlns:fb="http://www.facebook.com/2008/fbml" xmlns:og="http://opengraphprotocol.org/schema/">
  ....
  <body>
  <div id="fb-root"></div>
  <script>
        window.fbAsyncInit = function() {
              FB.init({
              appId      : '306025322809511',
              channel    : 'http://koreplayer.fb.levelkro.com/channel.php',
              status     : true, 
              cookie     : true,
              xfbml      : true,
              oauth      : true,
              });
              FB.Event.subscribe('auth.login', function () {
                    if (response.authResponse) {
                          window.location = "/manage.php";
                    }
              });
        };
        (function(d){
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/fr_FR/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
        }(document));
  </script>
  ....
  <div class="fb-login-button">Se connecter en utilisant Facebook</div>

我尝试过使用channel参数,但没有频道就没有显示样式。

3 个答案:

答案 0 :(得分:0)

您需要在“fb-login-button”上执行触发操作才能调用FB.login()。您可以使用onclick()或使用jQuery $('。fb-login-button')执行此操作。单击(function(){FB.login();});

此外,下面的问题不会阻止登录弹出,但它会在登录后停止刷新。所以,如果你已经登录,它会让它看起来像登录框一样没有任何反应只会打开然后关闭,因为它无关。

          FB.Event.subscribe('auth.login', function () { 
                if (response.authResponse) { 
                      window.location = "/manage.php"; 
                } 
          }); 

需要更改为

          FB.Event.subscribe('auth.login', function (response) { 
                if (response.authResponse) { 
                      window.location = "/manage.php"; 
                } 
          }); 

最后,windows.location理想情况下应该有一个完整的URL(以http://或https://开头)。不必,但应该让它更好地工作。


以下评论后编辑:

    window.fbAsyncInit = function() {
      FB.init({
        appId      : '306025322809511',
        channel    : 'http://koreplayer.fb.levelkro.com/channel.php',
        status     : true, 
        cookie     : true,
        xfbml      : true,
        oauth      : true,
      });
    };
    FB.Event.subscribe('auth.login', function (response) {
    if (response.authResponse) {
      window.location = "http://koreplayer.fb.levelkro.com/manage.php";
      }
    });

您需要在fbAsyncInit函数中订阅FB.Event:

window.fbAsyncInit = function() {
      FB.init({
        appId      : '306025322809511',
        channel    : 'http://koreplayer.fb.levelkro.com/channel.php',
        status     : true, 
        cookie     : true,
        xfbml      : true,
        oauth      : true,
      });
      FB.Event.subscribe('auth.login', function (response) {
        if (response.authResponse) {
          window.location = "http://koreplayer.fb.levelkro.com/manage.php";
         }
      });
    };

后期编辑:我已经在帖子第二部分的auth-subscribe参数中添加了“响应”。

答案 1 :(得分:0)

在我知道js sdk加载后我使用xfbml解析来渲染我的按钮,请在下面使用。


<div id="login_button"><div>
<div id="fb-root"></div>
<script>
      window.fbAsyncInit = function() {
        FB.init({
    appId  : '135669679827333',
    status : true, // check login status
    cookie : true, // enable cookies to allow the server to access the session
    xfbml  : true, // parse XFBML
    channelUrl : 'https://anotherfeed.com/emo/channel.html', // channel.html file
    oauth  : true // enable OAuth 2.0
        });  
function loginbutton(){
var loginb=document.getElementById('login_button');
login.innerHTML+='<div class="fb-login-button">Se connecter en utilisant Facebook</div>';
FB.XFBML.parse(loginb);
};
setTimeout("loginbutton();", 2000);
      };
  // Load the SDK Asynchronously
(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/en_US/all.js#xfbml=1&appId=135669679827333";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>

注意:这将仅呈现登录链接。

答案 2 :(得分:0)

好的,问题是由apps.facebook.com/koreplayer/的iFrame引起的,IE不保存cookie,因为它是在一个框架中。这是IE的一项安全功能,可以防止欺诈。