2012-04-05 11 views
2

Ich versuche, Facebook-Login-Funktionalität auf meiner Website mit Javascript hinzuzufügen. Ich habe FB.init und FB.login aufgerufen und bekomme das erwartete Popup-Fenster, das mich auffordert, mich mit meinen Facebook-Zugangsdaten anzumelden. Der Aufruf von FB.login fordert Benutzer_Birthday und E-Mail-Berechtigungen, so dass ich auch das erwartete Dialogfeld, das mich fragt, um diese Berechtigungen zu ermöglichen. Wenn ich akzeptiere, funktioniert der Login und die Kontrolle kehrt zu meiner Elternseite zurück.Abbrechen von Facebook Berechtigungsdialog leitet weiter und schließt nicht

Wenn ich die Berechtigungen nicht akzeptiere (drücken Sie die Schaltfläche Abbrechen), was als nächstes passiert, scheint inkonsistent zu sein. Was ich gehofft hatte, war, dass das Popup-Fenster verschwinden würde und die Kontrolle an das Elternfenster zurückgeben würde, das dann in der Lage wäre, die abgelehnte Antwort zu verarbeiten. Letztendlich möchte ich meinen Benutzern eine Nachricht geben, die sie darüber informiert, was passiert, wenn sie abbrechen.

Stattdessen sehe ich manchmal das Popup-Fenster Redirect auf die Facebook-Seite, die Sie sehen, wenn Sie direkt in Facebook einloggen. Manchmal wird das Popup-Fenster leer und sitzt nur dort (es zeigt auf die ChannelUrl-Seite, die ich im FB.init-Aufruf angegeben habe). In beiden Fällen wird die Steuerung erst dann an die übergeordnete Seite zurückgegeben, wenn ich das Popup-Fenster manuell geschlossen habe.

Beispielcode:

<html> 
<body> 
<div id="fb-root"></div> 
<script language="Javascript"> 
window.fbAsyncInit = function() { 
    FB.init({ 
     AppId  : 'XXXXXXX', 
     channelUrl: 'http://www.mydomain.com/channel.html', //custom channel 
     status: true, 
     cookie: true, 
     xfbml: true, 
     oauth: true 
    }); 

}; 

// 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)) 

function fbLogin() 
{ 
    FB.login(function (response){ 
     if (response.authResponse) { 
      Debug("Auth Logged in"); 
     } 
     else 
     { 
      Debug("Auth failed"); 
     } 
    }, {scope:'user_birthday,email'}); 
} 

function Debug(psMessage) 
{ // something to provide feedback on what happened... 
    var objDebug = document.getElementById("Debug"); 
    var objDate = new Date(); 
    var sTime = objDate.getHours() + ":" + objDate.getMinutes() + ":" + objDate.getSeconds(); 
    objDebug.innerHTML = sTime + " - " + psMessage + "<br>" + objDebug.innerHTML; 
} 
</script> 
<form> 
<input type="button" value="Log in" onClick="fbLogin();"> 
<br> 
<br> 
<br> 
<br> 
<div id="Debug"></div> 
</form> 

</body> 
</html> 

Ich habe eine Vielzahl von Dingen versucht. Ich habe gelöscht und eine neue Anwendung erstellt. Ich habe den channelUrl-Parameter erstellt (er enthält nur <script src="//connect.facebook.net/en_US/all.js"></script>).

Hat jemand irgendeinen Einblick, was ich falsch mache (das scheint zumindest in IE8, Safari 5.0.5 und Firefox 11.0 alle unter Windows XP zu passieren)?

Danke für jede Hilfe!

+0

Ich habe das gleiche genaue Problem, aber manchmal hängt das Fenster nur bei '/connect/xd_proxy.php?'. So frustrierend. –

Antwort

0

Ich weiß, das ist ein alter Thread, aber hoffentlich wird meine Lösung Menschen helfen, die das gleiche Problem haben.

  1. Wenn Sie alte Facebook Apps-Dashboard verwenden, deaktivieren Sie Ihre Sandbox-Modus.

  2. Wenn Sie das neue Facebook Apps Dashboard verwenden, klicken Sie auf Status und Überprüfung (in der linken Seitenleiste) und ändern Sie die Option "... für die allgemeine Öffentlichkeit" von Nein auf Ja.

Hope this helfen könnte. Goodluck;)

Verwandte Themen