2010-07-25 28 views
20

में लॉग इन करने के बाद पॉप-अप संवाद खुला रहता है मैं फेसबुक के लिए जेएस एसडीके का उपयोग न्यूथ/लॉगिन के लिए नए ग्राफैपी के आधार पर कर रहा हूं।जेएस एसडीके एफबी.लॉगिन() काम करता है लेकिन

क्या किसी को भी समस्या है जब FB.login() के बाद लॉग इन करते समय जेएस एसडीके के माध्यम से बुलाया गया था?

समस्या: के बाद मैं FB.Init() एसिंक्रोनस रूप से बुला (इस वजह से सभी एक window.fbAsyncInit समारोह में लिपटे) लॉगिन पॉप अप से प्रारंभ; मैं लॉग इन करता हूं लेकिन फिर पॉप-अप एक श्वेत पृष्ठ दिखाने के लिए रीफ्रेश करता है और पॉप-अप खुला रहता है और बंद नहीं होता ... क्यों? मैं FB.login() कॉलबैक में respond.session की जांच करने का इंतजार कर रहा हूं लेकिन ऐसा लगता है कि मैं इसे कभी वापस नहीं लेता क्योंकि यह पॉप-अप बस वहां चिपकता प्रतीत होता है और प्रक्रिया लॉग इन होने के बाद ही रुक जाती है और मैंने अभी यह पाया है पॉप-अप बस बंद हो जाएगा और मुझे कॉलबैक में प्रतिक्रिया.session स्वचालित रूप से वापस कर देगा। वह पॉप-अप क्यों नहीं चलेगा?

मैंने लॉग इन करने के बाद पॉप-अप से यूआरएल कॉपी किया और निम्नलिखित यूआरएल को सफेद दिखाया, तो ऐसा लगता है कि प्रतिक्रिया वहां है लेकिन फिर पॉप-अप विंडो बंद क्यों नहीं हो रही है इसलिए मेरा कॉलबैक संभाल सकता है प्रतिक्रिया??

http://static.ak.fbcdn.net/connect/xd_proxy.php#?=&cb=f18fe0b7c66da54&origin=http%3A%2F%2Flocalhost%2Ff3745f32ed63a7a&relation=opener&transport=postmessage&frame=f18adb488566372&result=user_photos&session={%22session_key%22%3A%222.vH4SVCisnh8HJWjEI1Vy_Q__.3600.1280106000-100001379631246%22%2C%22uid%22%3A%22100001379631246%22%2C%22expires%22%3A1280106000%2C%22secret%22%3A%22TH45WFg8I_5r_cOoVIujjg__%22%2C%22access_token%22%3A%22132444323462464|2.vH4SVCisnh8HJWjEI1Vy_Q__.3600.1280106000-100001379631246|q123iPQcKY45xWXtOZ2ebOOZTQQ.%22%2C%22sig%22%3A%22a75e85af2354292bfdcf90b9d319ebf7%22} 

मैं नोटिस किया है कि जब FB.login() कहा जाता है और प्रवेश पॉप-अप ऊपर आता है, मैं इसे कैसे तथ्य यह है कि मैं परीक्षण कर रहा हूँ पसंद नहीं करता है के बारे में बात FireBug में यह त्रुटि दिखाई स्थानीय होस्ट या कुछ और मुझे लगता है कि:

न आया हुआ अपवाद: nsresult: "0x80004005 (NS_ERROR_FAILURE)" स्थान: [अपवाद ... "0x80004005 (NS_ERROR_FAILURE) [nsIDOMLocation.host] घटक विफलता कोड लौटाया" "जे एस फ्रेम :: क्रोम : //smarterwiki/content/smarterwiki.js :: अनाम :: लाइन 1225 "डेटा: नहीं]

त्रुटि जो मुझे परेशान करती है ... मुझे यह पता लगाना होगा कि यह क्यों आ रहा है और मैं शर्त लगाओ कि मैं अकेला नहीं हूं जिसने इसे स्थानीय रूप से परीक्षण करते समय देखा है। मुझे फेसबुक फ़ोरम या कहीं और कहीं भी नेट पर समस्या निवारण पर कोई जानकारी नहीं दिखाई देती है। मुझे लगता है कि दूसरों को यह समस्या है लेकिन कोई संकल्प नहीं है।

तो जब आपने अपना आवेदन किया, तो क्या आपका फेसबुक पॉप-अप उपयोगकर्ता लॉग इन होने के ठीक बाद था या क्या आपको इस प्रक्रिया को समाप्त करने के लिए कुछ विशेष करने की आवश्यकता है?

इसके अलावा, मुझे लगता है कि अगर मैं मैन्युअल रूप से उस पॉप-अप को बंद करता हूं तो जांच करें कि यह कुकी मेरे सत्र को शामिल करने के लिए जेनरेट की गई थी, यह नहीं है (fbs_[yourappid] कुकी)। तो ऐसा लगता है कि कुछ समय से पहले समाप्त होता है। मुझे अपने इनिट कुकी में मिला है: सच तो मुझे आश्चर्य है कि क्या यह समस्या पॉप-अप संवाद बंद नहीं हो रही है, कुकी से संबंधित है, मेरे टेस्ट पीसी पर क्लाइंट-साइड भी नहीं बनाया जा रहा है।

+0

मैं एक ही समस्या है वापस चला गया। कॉफी Addict, क्या आप इस समस्या को हल करते हैं? – Kate

+0

मुझे क्रोम के नवीनतम संस्करण और फेसबुक के जावास्क्रिप्ट एसडीके के नवीनतम संस्करण में एक ही समस्या है। कॉफीएडिक्ट, क्या आप इसे ठीक करने में सक्षम थे? – Jaffer

+0

यहां वही समस्या है। कस्टम चैनल यूआरएल का प्रयास किया, यह सुनिश्चित किया कि OAuth 2.0 के लिए मेरे FB.init पैरामीटर के साथ सबकुछ अच्छा था। कुछ भी तो नहीं। फ़ायरफ़ॉक्स में, यह ठीक काम करता है। शायद यह असीमित लोडिंग के साथ केवल एक समस्या है? मैं समकालिक रूप से एफबी लाने की कोशिश करने जा रहा हूं। – mikermcneil

उत्तर

2

मुझे नहीं पता कि आपका कोड क्या है, लेकिन मेरी समस्या मैं <div id="fb-root"></div> जोड़ना भूल गया था। मेरा कोड:

<div id="fb-root"></div> 
<script src="http://static.ak.fbcdn.net/connect/en_US/core.js"></script> 
<script> 
    FB.init({ apiKey: 'app key'}); 
</script> 
<div class="fbloginbutton" id="fb-login" onclick="Login();"> 
<span id="fb_login_text" >Login with Facebook</span> 
</div> 
<asp:Label ID="errMsg" runat="server"></asp:Label> 
<script type="text/javascript"> 
    function Login() { 
     FB.login(function(response) { 
      document.getElementById('fb_login_text').innerHTML = 'Logout'; 
      if (response.session) { 
       FB.api('/me', function(response) { 
        var str; 
        str = response['id'] + ";" + 
          response['name'] + ";" + 
          response['first_name'] + ";" + 
          response['last_name'] + ";" + 
          response['link'] + ";" + 
          response['birthday'] + ";" + 
          response['gender'] + ";" + 
          response['email']; 
        alert(str); 
       }); 
      } 
      else { 
       document.getElementById('fb_login_text').innerHTML = 'Login with Facebook'; 
      } 
     }, { perms: 'user_birthday,email' }); 
    }; 
</script> 

जैसा कि आप देखते हैं कि मैं कहीं भी div fb-root का उपयोग नहीं करता लेकिन यह फेसबुक लॉगिन काम की आवश्यकता है!

+1

ध्यान दें कि शनिवार के बाद respond.session काम नहीं करेगा! आपने OAuth के साथ FB.init() को निश्चय किया है: ओएथ 2 के साथ जेएस एपीआई पर माइग्रेट करना सही है। https://developers.facebook.com/docs/oauth2-https- माइग्रेशन/ – Abby

+0

एबी ने जो कहा, उस पर विस्तार करने के लिए, आपको 'respond.session' को 'response.authResponse' में बदलना होगा और अनुमति' अनुमति 'से बदलना होगा 'scope' –

+0

के अलावा आप authResponse का उपयोग नहीं कर रहे हैं यह मेरे लिए सही जवाब है, मैं अपना कोड ले जाने के बाद" fb-root "जोड़ना भूल गया। –

1

ऐसा लगता है कि आप स्थानीयहोस्ट की कोशिश कर रहे हैं, क्या आप इसे सार्वजनिक यूआरएल से आजमा सकते हैं।

मुझे पहले से ही इस समस्या का सामना करना पड़ा है। लेकिन मैंने सार्वजनिक यूआरएल (उदाहरण। Www.something.com/test/) के रूप में आवेदन में कैनवास यूआरएल को कॉन्फ़िगर करके इसे हल किया।

2

यह समस्या मेरी साइट के लिए कहीं भी नहीं दिखाई दी, जब फेसबुक ने अपने "all.js" में हालिया परिवर्तन किया।

उनके जावास्क्रिप्ट के पहले संस्करण में मुझे आईई के लिए विशिष्ट समस्या थी, और मैंने इंटरनेट पर किसी के पोस्ट से कोड के इस छोटे स्निपेट की प्रतिलिपि बनाई। यह गुप्त लग रहा था, लेकिन समय पर समस्या का समाधान:

// http://developers.facebook.com/bugs/204792232920393 

    // Hack to fix http://bugs.developers.facebook.net/show_bug.cgi?id=20168 for IE7/8/9. 
    FB.UIServer.setLoadedNode = function (a, b) { FB.UIServer._loadedNodes[a.id] = b; }; 
    FB.UIServer.setActiveNode = function(a, b) { FB.UIServer._active[a.id]=b; }; 

यह पता चला उन पंक्तियों के मेरे लिए इस समस्या पैदा कर रहे थे। मैंने उन्हें हटा दिया, और समस्या चली गई। आईई के लिए विशिष्ट मूल बग भी तय किया गया है, मुझे विश्वास है, हाल ही में "all.js" में।

+0

मैंने यहां वही देखा। अब मुझे अपने सभी ऐप्स अपडेट करना होगा :-( स्पष्ट रूप से channelUrl आईई पर समस्याएं पैदा कर रहा है, इसलिए मैं इसे हटा देता हूं। – sbaechler

+0

वे हमेशा बिना किसी सूचना के अपना कोड बदलते हैं ... इसे स्पॉट करने के लिए धन्यवाद। समस्या को हल करें! – bcm

2

मैंने हाल ही में इस मुद्दे से संघर्ष किया। यह समस्या फेसबुक जेएस एसडीके में कुछ बदलावों से संभवतः कहीं से दिखाई नहीं दे रही है। इसके लायक होने के लिए मैं जेएस एसडीके का फिर से उपयोग करने की योजना नहीं बना रहा, ये यादृच्छिक मुद्दे मेरा समय खाते हैं।

वैसे भी हैक है कि मैं इस मुद्दे को हल करने के लिए उपयोग करता था।

var accessToken, fb_response; 

if (window.location.hash.length < 30) { 
    window.location = "http://www.facebook.com/dialog/oauth?client_id=YOUR_ID&redirect_uri=YOUR_URL&scope=YOUR_PERMISSIONS&response_type=token"; 
} else { 
    fb_response = window.location.hash; 
    accessToken = fb_response.substr(14, fb_response.indexOf("&expires") - 14); 
    FB._authResponse = { 
    accessToken: accessToken 
    }; 
    window.location.hash = ""; 
    FB.api("/me", function(profile) { 
    if (profile.id) { 
     app_init(); 
    } else { 
     alert("Problem connecting to Facebook"); 
    } 
    }); 
} 

असल में मैं उपयोगकर्ता को फेसबुक ओथ संवाद में भेजता हूं और जब वे वापस आते हैं तो मैं हैश से एक्सेस टोकन लेता हूं। फिर मैंने फेसबुक ऑब्जेक्ट पर आंतरिक एक्सेस टोकन पैरामीटर सेट किया। एक बार ऐसा करने के बाद आप सभी सामान्य फेसबुक एपीआई कॉल कर सकते हैं।

उम्मीद है कि यह किसी की मदद करता है! भविष्य की परियोजनाओं के लिए मैं निश्चित रूप से एक सर्वर पक्ष ऑथ प्रवाह के साथ रहूंगा, आपके पास बहुत अधिक नियंत्रण है!

1

यह मेरे लिए एक काम कर नमूना है:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Facebook Client-side Authentication Example</title> 
    </head> 
    <body> 
    <div id="fb-root"></div> 
    <script> 
     // Load the SDK Asynchronously 
     (function(d){ 
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     ref.parentNode.insertBefore(js, ref); 
     }(document)); 

     // Init the SDK upon load 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : '00000000000000', // Your App ID 
      channelUrl : '//'+window.location.hostname+'/channel', // Path to your Channel File 
      status  : true, // check login status 
      cookie  : true, // enable cookies to allow the server to access the session 
      xfbml  : true // parse XFBML 
     }); 

     // listen for and handle auth.statusChange events 
     FB.Event.subscribe('auth.statusChange', function(response) { 
      if (response.authResponse) { 
      // user has auth'd your app and is logged into Facebook 
      FB.api('/me', function(me){ 
       if (me.name) { 
       document.getElementById('auth-displayname').innerHTML = me.name; 
       } 
      }) 
      document.getElementById('auth-loggedout').style.display = 'none'; 
      document.getElementById('auth-loggedin').style.display = 'block'; 
      } else { 
      // user has not auth'd your app, or is not logged into Facebook 
      document.getElementById('auth-loggedout').style.display = 'block'; 
      document.getElementById('auth-loggedin').style.display = 'none'; 
      } 
     }); 

     // respond to clicks on the login and logout links 
     document.getElementById('auth-loginlink').addEventListener('click', function(){ 
      FB.login(); 
     }); 
     document.getElementById('auth-logoutlink').addEventListener('click', function(){ 
      FB.logout(); 
     }); 
     } 
    </script> 

    <h1>Facebook Client-side Authentication Example</h1> 
     <div id="auth-status"> 
     <div id="auth-loggedout"> 
      <a href="#" id="auth-loginlink">Login</a> 
     </div> 
     <div id="auth-loggedin" style="display:none"> 
      Hi, <span id="auth-displayname"></span> 
     (<a href="#" id="auth-logoutlink">logout</a>) 
     </div> 
    </div> 

    </body> 
</html> 
0

वेबसाइट स्पष्ट रूप से कहा गया है कि all.js समाप्त हो गई है। हालांकि, मुझे वही त्रुटि मिलती है जो आपको केवल sdk.js. के साथ मिलती है। यदि समस्या ठीक किया गया था जब घिस all.js

// Old SDK (deprecated) 
js.src = "//connect.facebook.net/en_US/all.js"; 

// New SDK (v2.x) 
js.src = "//connect.facebook.net/en_US/sdk.js"; 

facebook sdk

संबंधित मुद्दे