517 Stimmen

Facebook Callback fügt '#_=_' an die Rückgabe-URL an

Facebook-Callback hat mit dem Anhängen von #_=_ Rautenunterstrich in der Rückgabe-URL

Weiß jemand, warum? Was ist die Lösung?

0 Stimmen

Ich stehe auch vor dem gleichen Problem: stackoverflow.com/q/7190184/912011 Ich denke jedoch, dass es mit der Firefox-Version zusammenhängen könnte.

0 Stimmen

Hat jemand eine Lösung für dieses Problem gefunden? Die Standard-Facebook-Connect-Sdk funktioniert nicht.

0 Stimmen

Das Beste, was wir tun können, bis Facebook diesen Fehler korrigiert (oder ihre Dokumentation) ist in meiner Antwort unten. Erstens, richten Sie Ihre Login-URLs in Übereinstimmung mit der Dokumentation ein. Und zweitens, fügen Sie eine schnelle Header-Javascript-Hack, um dies in Ihrem Code zu vermeiden. Dies wird gut abnehmen, wenn Facebook jemals dieses Problem behebt.

9voto

pkiddie Punkte 323

Sie können auch einen eigenen Hash auf der Registerkarte redirect_uri Parameter für den Facebook-Callback, der unter bestimmten Umständen hilfreich sein kann, z. B. /api/account/callback#home . Wenn Sie zurückgeleitet werden, wird es zumindest ein Hash sein, der einer bekannten Route entspricht, wenn Sie backbone.js oder ähnliches verwenden (bei jquery mobile bin ich mir nicht sicher).

8voto

Jeremy Whitt Punkte 261

Sehr ärgerlich, vor allem für Anwendungen, die die URI parsen und nicht nur die $_GET lesen... Hier ist der Hack, den ich zusammen geworfen habe... Viel Spaß!

<html xmlns:fb='http://www.facebook.com/2008/fbml'>
<head>
        <script type="text/javascript">
        // Get rid of the Facebook residue hash in the URI
        // Must be done in JS cuz hash only exists client-side
        // IE and Chrome version of the hack
        if (String(window.location.hash).substring(0,1) == "#") {
                window.location.hash = "";
                window.location.href=window.location.href.slice(0, -1);
                }
        // Firefox version of the hack
        if (String(location.hash).substring(0,1) == "#") {
                location.hash = "";
                location.href=location.href.substring(0,location.href.length-3);
                }
        </script>
</head>
<body>
URI should be clean
</body>
</html>

6voto

neemzy Punkte 1849

Dies kann zu einem ernsten Problem werden, wenn Sie ein JS-Framework mit Hashbang-URLs (/#!/) verwenden, z. B. Angular. In der Tat wird Angular URLs mit einem Nicht-Hashbang-Fragment als ungültig betrachten und einen Fehler ausgeben:

Error: Invalid url "http://example.com/#_=_", missing hash prefix "#!".

Wenn Sie sich in einem solchen Fall befinden (und auf Ihre Domain Root umleiten), sollten Sie stattdessen :

window.location.hash = ''; // goes to /#, which is no better

Einfach tun:

window.location.hash = '!'; // goes to /#!, which allows Angular to take care of the rest

5voto

Sebastian Tusk Punkte 220

Ich verstehe nicht, wie dieses Problem mit Facebook AJAX zusammenhängt. In der Tat tritt das Problem auch bei deaktiviertem JavaScript und rein redirect-basierten Anmeldungen auf.

Ein Beispiel für einen Austausch mit Facebook:

1. GET <https://www.facebook.com/dialog/oauth?client_id=MY_APP_ID&scope=email&redirect_uri=MY_REDIRECT_URL> RESPONSE 302 Found Location: <https://www.facebook.com/connect/uiserver.php?[...]>  
2. GET <https://www.facebook.com/connect/uiserver.php?[...]> RESPONSE 302 Found MY_REDIRECT_URL?code=FB_CODE#_  
3. GET MY_REDIRECT_URL?code=FB_CODE#_  

Passiert bei mir auch nur mit Firefox.

4voto

neokio Punkte 5155

Wenn ich dies zu meiner Weiterleitungsseite hinzufüge, ist das Problem für mich gelöst ...

if (window.location.href.indexOf('#_=_') > 0) {
    window.location = window.location.href.replace(/#.*/, '');
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X