2017-09-16 4 views
0

Ich mache Auth mit Facebook, die neue Registerkarte öffnet und Benutzer an Port 8080 nach Backend umgeleitet, nachdem er authentifiziert ist. Dann wird er zurück zur App weitergeleitet. Von dort möchte ich das Fenster schließen und die Funktion auf Opener-Fenster window.opener.functionAfterFinish() aufrufen, die es auth beendet wissen lassen wird. Problem ist, dass ich diese Funktion in index.html haben muss, damit es funktioniert. Wenn ich functionAfterFinish(): void{...} in Komponente erstelle, wird es nicht aufgerufen.Führen Sie JavaScript-Funktion in Angular 4

Was sind meine Optionen? Wie sollte ich diese Funktion in die Komponente einfügen und ausführen lassen?

+0

Frage nicht klar ist Thema zu vermitteln, aber Sie können Facebook SDK Winkel Wrapper namens versuchen [ ngx-facebook] (https://github.com/zyra/ngx-facebook) Instanz von Hardcoding Javascript. –

Antwort

0

Nun, ich schlage vor, Sie Cookies zu verwenden.

  1. Zunächst müssen Sie Cookies erstellen, während Sie auf die neue Registerkarte umleiten. Beispiel: this._cookieService.createCookie('fbCookies', 'success', 3);

  2. Jetzt müssen Sie die Cookies überprüfen, indem Sie ein festgelegtes Intervall in der Methode verwenden, in der Sie die Authentifizierungsantwort erhalten. Beispiel-

    let interval = setInterval(function(){ 
            let cookie = this._cookieService.readCookie('fbCookies'); 
            if (cookie === 'success') { 
             newWindow.close(); 
             clearInterval(interval); 
            }else if (cookie === null) { 
              clearInterval(interval); 
              newWindow.close(); 
            } 
           }, 5000); 
    

So sobald Sie den Erfolg Registerkarte bekommen nahe sein.

+0

Ich weiß darüber, aber das ist keine gute Lösung. Callback-Funktion ist, was ich anstrebe, aber ich kann nicht herausfinden, wie auf Funktionen in Komponenten zugreifen. Ich konnte nur auf Funktionen in index.html

0

Sie haben Ihre Komponente Service oder Verfahren auf dem window Objekt setzen

In Ihrem Service/Komponente:

askFacebook(){ 
    (window as any).functionAfterFinish=this.functionAfterFinish.bind(this); 
    // Do ask facebook 
} 

Achten Sie darauf, den Rückruf in der Winkelzone laufen.

(Leider Kürze halber, ich auf meinem Handy bin zu beantworten. Wenn Sie Fragen haben, zögern Sie nicht einen Kommentar zu hinterlassen)