Wie schließe ich einen Facebook SDK-Dialog, der mit FB.ui () geöffnet wurde?

8

Ich habe erfolgreich einen Einladungs-Freundendialog angezeigt (Code unten gezeigt). Wenn der Benutzer auf Überspringen klickt, zeigt der iFrame / Dialog eine neue Seite an. Aber von diesem Punkt aus kann ich keinen Weg finden, wie ich den Iframe / Dialog schließen kann. FB.ui gibt kein Objekt zurück, es scheint keine JavaScript SDK-Methode zu geben, und das Verschieben und Manipulieren mit dem DOM wird für alle FB-Code-Änderungen brüchig.

Irgendwelche Ideen?

%Vor%

(Hinweis: Ich habe die gleiche Frage im Facebook-Forum ohne Antwort gepostet. Ich werde beides aktualisieren, sollte es eine Antwort geben.)

Der JavaScript-Code wurde von einem Stapelüberlauf angepasst Antwort .

    
Nick 10.01.2011, 11:43
quelle

6 Antworten

5

Ich habe die gleichen Probleme. Zweiter Tag auf der Suche nach einer Lösung. Und gerade einen Weg gefunden: Zum Schließen des aktiven FB-Dialogs sollten Sie den folgenden Code im übergeordneten Fenster ausführen, wo FB JS verfügbar ist und wo FB.ui aufgerufen wurde:

%Vor%

Wenn Sie also möchten, dass Ihr Einladungsdialog automatisch geschlossen wird und Sie nicht auf eine andere Seite umleiten, verwenden Sie diese Schritte:

1) Setzen Sie den Zielattrtr von und als "_self":

  

target="_ self"

2) Erstellen Sie beispielsweise eine Callback-URL / Seite auf Ihrer Site   https://mysite/close_dialog.html

3) Setzen Sie die Aktion attr als gerade erstellte URL:

  

action="http: //mysite/close_dialog.html"

4) In Ihrem close_dialog.html put folgt JS:

%Vor%

UPDATE:

5) Es gibt ein anderes Problem auf diese Weise: FB iframe wird von https geladen, aber wenn die Anfrage-Form "action" attr "http" verwendet, erhält der Benutzer eine Browser-Warnung. Aber wenn Anfrage-Formular 'Aktion' hat 'https' - Iframe js kann nicht auf Eltern zugreifen geladen von 'http'. Also, es ist der Grund, warum Sie eine Aktion von 'https' verwenden sollten

Hoffe, das hilft

Wenn Sie eine bessere Lösung haben oder Sie können dies verbessern - bitte teilen Sie dies alles mit, Danke für Kommentare.

    
Igor Reshetnikov 21.01.2011 06:18
quelle
3

Das geht nicht (zumindest nicht für mich).

Was ich getan habe, war einfach das Javascript window.close (); Funktion statt top.window.FB.Dialog.remove (top.window.FB.Dialog._active); und es funktioniert.

%Vor%     
Luis Fernando 20.05.2011 16:01
quelle
0

Ich fand, dass die Antwort von Igor Reshetnikov funktioniert hat, aber nur, wenn ich sichergestellt habe, dass beide Seiten - die, die den Dialog öffnet, und close_dialog.html - als Teil der gleichen Domäne deklariert werden, die document.domain verwendet. Also oben in den Skript-Tags in beiden Seiten musstest du diese Zeile hinzufügen

%Vor%

ersetzt offensichtlich mysite.com durch was immer Ihre Domain ist

    
nathajamal 05.06.2011 17:11
quelle
0

Der FB.ui bietet eine Option für eine Callback-Funktion, die ausgeführt wird, nachdem der FB.ui abgeschlossen ist.

%Vor%

Wird dies helfen, Ihr Problem zu lösen?

    
Bennet 11.04.2012 04:22
quelle
0

Dies schließt alle Dialoge, funktioniert aber aufgrund des Zugriffs auf die interne Variable _loadedNodes

möglicherweise nicht mit zukünftigen Releases %Vor%     
James Westgate 11.04.2012 14:49
quelle
0

FWIW, das Datenschutz-Plugin meines Browsers hat FB daran gehindert, den Dialog zu schließen. Ich habe gerade das Privacy-Plugin ausgeschaltet und der Dialog hat sich wie erwartet geschlossen.

    
robbie b 25.11.2015 23:18
quelle