Facebook登录按钮事件在IE9中未首次触发

时间:2012-11-21 12:46:10

标签: javascript jquery facebook-graph-api facebook-login

我有一个页面,其中我添加了一个自定义的facebook登录按钮,我在该点击事件中调用FB.Login()。

除了IE9和IE8之外,它在所有浏览器中都能正常工作,问题是我第一次打开我的网站并点击登录按钮时没有弹出窗口。刷新页面并单击按钮后,会出现弹出窗口。

以下是我的代码:

<script type="text/javascript">
window.fbAsyncInit = function() {
      FB.init({
  appId: 'APPID',
        status     : true, 
        cookie     : true,
        xfbml      : true,
        oauth      : true
      });
  $("#fb").click(function () {

           FB.login(function(response) {//calling facebook login 

          }, {scope: 'user_photos,email,user_birthday,user_likes,user_activities,read_stream,user_religion_politics,user_relationships,user_education_history,user_work_history,user_hometown,user_location'});
  });

};
     (function(d){
       var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {
       //alert("k");
       return;}
       js = d.createElement('script'); js.id = id; js.async = true;
       js.src = "//connect.facebook.net/en_US/all.js";
       d.getElementsByTagName('head')[0].appendChild(js);
     }(document));

</script>
 <input type="button" class="fb" id="fb" />

我不知道我是否正确,但我认为最初没有创建facebook对象,这就是登录窗口未来的原因。

1 个答案:

答案 0 :(得分:0)

您已将click事件添加到Facebook #fb上的AsyncInit输入中。您无法确定这将在输入加载后运行。

换句话说,你无法保证执行顺序,结构化代码的方式,因为click事件是在回调中添加的,而回调可以可能是在DOM(和input元素)完全加载之前调用。

尝试在代码按钮后添加事件。或者,调查the .ready() method,以延迟javascript代码的某些部分执行,直到DOM完全加载为止。