2012-05-02 14 views
10

Die folgende FB.Login-Funktion funktioniert gut in Desktop-Chrome, FF und Safari. Aber in mobilen Safari (getestet auf einem iPhone 4S), hängt es und kehrt nicht zum FB.login Callback zurück. Ich kann das auch in der Konsole sehen, wenn ich Safari benutze und den Benutzer-Agent auf "Safari iOS 4.3.3 - iPhone" setze.Facebook FB.login funktioniert in Safari, aber nicht mobil Safari

Liegt das daran, dass mobile Safari Popups blockiert? (FB.login löst einen Popup-Dialog aus).

Wie behebe ich das? Vielen Dank.

function Login(returnLink) { 
     FB.login(function(response) { 
        if(response.status === 'connected') { 
         console.log('User is now FB logged in.'); 
         // now log them into my site 
         encodedReturnLink = encodeURIComponent(returnLink); 
         window.location = location.protocol + '//' + location.host + "/login?returnUrl=" + encodedReturnLink; 
        } 
        else { 
         console.log('User did not fully authorize after clicking FB login button.'); 
        } 
       }, 
       {scope : 'email, publish_actions, publish_stream'} 
     ); 
} 
+0

Rufen Sie dies sofort nach der Benutzerinteraktion (click/tap/submit) oder aus irgendeinem verzögerten Code? –

+1

Das gleiche Problem läuft. Hast du eine Lösung gefunden? – Jaffer

Antwort

0

Es ist definitiv keine Frage der Blockierung von Popups. Obwohl ich ein Szenario gesehen habe, in dem der Login funktioniert, wenn direkt aufgerufen, aber nicht, wenn das Ergebnis eines Ajax Callbacks.

+0

Nun, das ist in der Tat eine Frage des Blockierens von Popups, da es offensichtlich blockiert ist, wenn es als Callback aufgerufen wird und nicht wenn es direkt aufgerufen wird? – gapvision

0

Überprüfen Sie die URL der mobilen Website in Ihren Facebook App-Einstellungen.

6

Ich habe versucht, FB.Login automatisch auf Seite laden innerhalb window.fbAsyncInit laufen und es war nicht in Safari auf iOS. Es stellte sich heraus, dass Safari das Popup-Fenster blockierte, das durch den Aufruf von FB.Login ausgelöst wurde. Safari und Chrome auf dem Desktop funktionierte gut (erlaubt das Popup).

Ich fand die einzige Möglichkeit zu umgehen, um den FB.Login Aufruf als Reaktion auf Benutzerinteraktion (z. B. Tippen oder Klicken) auszulösen. Dieser arbeitete für mich:

HTML

<a href="#" id="fbLogin">Login with Facebook</a> 

JavaScript (jQuery)

$('#fbLogin').click(function(){ 
    FB.login(function(response){ 
     // Do something... 
    }); 
}); 

Getestet auf Safari (iOS 8.0).

+0

+1 für die richtige Lösung geben. Es hat meine Kopfschmerzen beseitigt. Danke vielmals. – neeraj

+1

Safari scheint sehr empfindlich auf blockierende Pop-ups zu reagieren. Wenn Sie überhaupt verzögern (selbst wenn Sie auf einen kleinen Betrag für andere Rückrufe warten), scheint es die Blockierung auszulösen. – justrhysism

+0

@wireblue ist dies immer noch die einzige Möglichkeit, die Anmeldung in aktuellen Versionen auszulösen? – gapvision

Verwandte Themen