0

カスタマイズされた 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オブジェクトが作成されていないため、ログインウィンドウが表示されないと思います。

4

1 に答える 1

0

Facebookclickの入力にイベントが追加されています。入力がロードされた後にこれが実行されることを確実に知ることはできません。#fbAsyncInit

つまり、イベントはコールバックに追加され、DOM(および要素)が完全にロードされる前にclickそのコールバックが呼び出される可能性があるため、実行の順序、コードの構造化方法を保証することはできません。input

コードのボタンの後にイベントを追加してみてください。または、 .ready()メソッドを調べて、DOMが完全に読み込まれるまでjavascriptコードの一部の実行を遅らせます。

于 2012-11-21T13:55:58.263 に答える