2012-02-07 9 views
0

私はFacebookのドキュメントとここでStackOverflowで検索しています。このコードはFirefoxとChrome、さらにInternet ExplorerでもページがキャンバスのiFrame内に読み込まれていないときに機能しますが、アプリケーションキャンバスのiFrameではコールバックを呼び出さないため、getUserDatafbAskAuth()も呼び出されません。ご覧のとおり、私はchannelUrlパラメータを埋めました。これは私のコードです:getLoginStatusとgetAuthResponseがIEで動作しません

別のjsファイルで
var fb = {}; 

fb = function(){ 

    var pub = {}; 
    var priv = {}; 
    var base_url = '{base_url}'; 

    //atributes 
    pub.user = {}; 
    pub.token = {}; 

    //methods 
    pub.init = function(callback) 
    { 
     //When the library has loaded, it calls this function 
     window.fbAsyncInit = function() { 

     //Facebook jsSDK inizalization 
     FB.init({ 
      appId : '{app_id}', 
      channelUrl: base_url + 'res/channel.php', 
      status : true, // check login status 
      cookie : true, // enable cookies to allow the server to access the session 
      xfbml : true, // parse XFBML 
      oauth: true 
     }); 

     //Resize the iframe 
     FB.Canvas.setSize({ width: 760, height: ($('body').outerHeight(true) + 50) }); 

     // Check for the user session 
     FB.getLoginStatus(function(response){ 
      if (response.status === 'connected') 
      { 
       // This user has already authorized the app 
       priv.getUserData(response, callback); 
      } 
      else 
      { 
       // No user session available, this is a new user to the app 
       // or a user not logued in facebook 
       priv.fbAskAuth(callback); 
      } 
     }); 

     }; 

     //Asyncronous get of facebook library. 
     (function() { 
     var e = document.createElement('script');e.async = true; 
     e.src = document.location.protocol + 
      '//connect.facebook.net/es_ES/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
     }()); 

    }; 

    pub.inviteSendGeneral = function() 
    { 
     FB.ui({ 
       method: 'apprequests', 
       message: pub.user.name+' te ha invitado a participar en La Porra de GOLT.', 
       data: 'tracking info' 
      }, function(requests){ 
       $.ajax({ 
         url: base_url + 'ajax/invite/', 
         type: 'post', 
         data: {fuid: pub.user.id, invitation: requests }, 
         success: function(resp) 
         { 
          $('#help-msg').html(resp); 
         } 
        }); 
      }); 
    } 

    pub.inviteSend = function() 
    { 
     FB.ui({ 
       method: 'apprequests', 
       message: pub.user.name+' te ha invitado a participar en una porra.', 
       data: 'tracking info' 
      }, function(requests){ 
       if(requests !== undefined) 
       { 
        for(var i=0; i<requests.request_ids.length; i++) 
        { 
         FB.api(requests.request_ids[i], {access_token: pub.user.access_token}, function(request_obj){ 

          $.ajax({ 
            url: base_url + 'ajax/friends_invite/', 
            type: 'post', 
            data: {fuid: pub.user.id, invitation: request_obj.id, invited: request_obj.to.id, round: pub.getId($('.invite-friends').attr('id'))}, 
            success: function(resp){ 
             $('#help-msg').html(resp); 
            } 
           }); 
         }); 
        } 
       } 
      }); 
    } 

    priv.getUserData = function(response, callback) 
    { 
    FB.api('/me', {access_token: response.authResponse.accessToken}, function(user_data) { 

     if(user_data.id != '0'){ 
      pub.user = user_data; 
      pub.token = response.authResponse.accessToken; 
      callback.call(); 
     }else{ 
      priv.fbAskAuth(callback); 
     } 
    }); 
    }; 

    pub.checkLikes = function(likes, page_id) 
    { 
      //var likes = $.parseJSON(data); 
      for(var i=0; i<likes.data.length; i++) 
      { 
      if(likes.data[i].id == page_id){ 
       return true; 
      } 
      } 
     return false; 
    } 

    priv.fbAskAuth = function(callback) 
    { 
    FB.login(function(response) { 
     if (response.status === 'connected') { 

      priv.getUserData(response, callback); 

     } else { 
     // user is not logged in 
     priv.fbAskAuth(callback); 
     } 
    }, {scope:'{app_perms}'}); 
    }; 

    pub.array2str = function(requests) 
    { 
    var result_str = ''; 
    for(var i=0; i < requests.length; i++) 
    { 
     if(i == requests.length-1) 
      result_str = result_str + requests[i]; 
     else 
      result_str = result_str + requests[i] + ','; 
    } 

    return result_str; 
    }; 

    pub.getId = function(str) 
    { 
    var id_array = str.split('_'); 
    return id_array[id_array.length-1]; 
    }; 

    return pub; 

}(); 

、私はfb.initを呼び出すだけでなく、私は他のオブジェクトや関数が含まれます。すべては、任意のヒントが、おかげでいただければ幸いです

$(document).ready(function(){ 

    fb.init(function(){ 
     if($('.penaltis').length > 0) 
     { 
      loadFriends(); 
     } 
    }); 

}); 

そのコールバックを呼び出していないgetLoginStatusを除き、正常に動作します。

答えて

0

多くの場合、2つの典型的な問題がすべての問題を解決すると思います。最初の1つは、FacebookがあなたのアプリのURLをhttpsで呼び出すということです。第二は定義することを忘れることです。 https://であなたのページをチェックしましたか?

+0

はい、私はsslの資格情報とhttpsを持っていて、これと他のアプリで作業しています。私はhttp://とhttps://を試して、https://ではすべての要求がhttps:// –

+0

ボタンをどこかに置いて、JavaScriptが動作していることを確認してください。もちろん、見つけ出すには百万の解決策があります。これが最速の解決策かもしれません。とにかく、コンソールにエラーメッセージが表示されるはずです(うまくいけば)。 –

+0

javascriptが動作していて、他のjavascriptリスナーが動作していて、facebookダイアログが正常に動作しています。私は回避策を行い、このブラウザでPHPからデータを取得するためのコードを追加すると思います... –

関連する問題