2017-09-16 94 views
0

我正在通過Facebook進行身份驗證,打開新選項卡並在用戶通過身份驗證後將用戶重定向到端口8080上。然後他被重定向迴應用程序。從那裏我想關閉窗口並打開啓動窗口window.opener.functionAfterFinish()上的函數,讓它知道auth完成。問題是我必須在index.html中具有該功能才能工作。如果我在組件中創建了functionAfterFinish(): void{...},它將不會被調用。在Angular 4中執行javascript函數

我有什麼選擇?我應該如何把這個功能放在組件中並讓它執行?

+0

問題不明確傳達的問題,但您可以嘗試的Facebook SDK角包裝名爲[ ngx-facebook](https://github.com/zyra/ngx-facebook)硬編碼javascript的實例。 –

回答

0

那麼,我會建議你使用cookies。

  1. 首先,您需要在重定向到新選項卡時創建cookie。 例如:this._cookieService.createCookie('fbCookies', 'success', 3);

  2. 現在,您需要通過在獲取身份驗證響應的方法中使用設置的時間間隔來檢查cookie。 例 -

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

因此,只要你會得到成功的標籤將接近。

+0

我知道這一點,但這不是一個好的解決方案。回調函數是我要做的,但我無法弄清楚如何訪問組件中的函數。我只能訪問index.html

0

你必須設置你的組件服務或方法的window對象

內,您的服務/組件上:

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

請務必在角區域中運行的回調。

(對不起,簡潔,我回答我的電話。如果您有任何疑問,請不要猶豫,發表評論)