黑屏,在Edge浏览器上登录Facebook时阻止弹出窗口

时间:2018-09-06 12:42:29

标签: javascript facebook login microsoft-edge

在Edge上登录Facebook后,我得到一个空白的弹出屏幕,并且它没有返回我的网站。这仅在EDGE上发生。 Chrome,IE和Firefox可以正常工作。

我正在执行以下步骤:https://developers.facebook.com/docs/facebook-login/web

我正在使用Angular 6.0.3,Facebook应用程序是v2.8。我曾经使用过该库:https://github.com/abacritt/angularx-social-login但存在相同的问题。

问题:

在Edge上,单击我的登录按钮,出现弹出窗口,然后输入我的凭据。在Facebook弹出窗口中点击“登录”后,它将重定向到空白页面。该空白弹出页面的URL有许多查询参数,其中之一是我提供的指向我的网站的重定向地址,但弹出窗口保持空白,我面临着可怕的死亡白屏。如果我访问facebook.com,则可以看到我已登录,因此登录确实在后台进行。 如果我再次尝试使用登录按钮,它将检测到我已经在Facebook上登录(不需要弹出窗口),并且正确登录。

我已经检查了其他网站上的其他一些Facebook登录名,其流程正常。发生了一件非常奇怪的事情,我有点想办法调试它了。

技术信息:

具有以下URL的弹出框:https://www.facebook.com/v2.8/dialog/oauth

这些是URL的参数:

channel:https://staticxx.facebook.com/connect/xd_arbiter/r/0P3pVtbsZok.js?version=42#cb=fc47f20d632548&domain=[URL_SITE]&origin=http://[URL_SITE]/f1b71a9e066ec68&relation=opener
redirect_uri:https://staticxx.facebook.com/connect/xd_arbiter/r/0P3pVtbsZok.js?version=42#cb=fe2a67e04514f4&domain=[URL_SITE]&origin=http://[URL_SITE]/f1b71a9e066ec68&relation=opener&frame=f314680605ed16c
display:popup
response_type:token,signed_request
domain:[URL_SITE]
origin:1
client_id:[FACEBOOK_APPID]
ret:login
sdk:joey
fallback_redirect_uri:http://[URL_SITE]/login
logger_id:60d7353d-4421-302a-736e-cd0fb03700c1
ext:1536240204
hash:Aeb1berMmtAvxEu3

代码

这就是我所说的登录过程:

<div class="md-facebook-btn ng-scope ng-isolate-scope">
<button class="md-button md-ink-ripple" type="button" (click)="FacebookLogin()">
    <span flex="" class="ng-binding ng-scope flex">{{ 'LOGIN.ENTER_FACEBOOK' | translate }}</span>
    <div class="md-ripple-container"></div>
</button>
</div>

TS的登录过程

FacebookLogin() {
            this.facebookAuthentication.login().then(
                (userData) => {
                    ...
                    }).catch((err: any) => {
                        ...
                    });
                }, (reason) => {
                    ...
                }
            );
    }

最后,该服务:

export class FacebookAuthenticationService {

  constructor(private appConfig: AppConfigurationRef) { }

  private FACEBOOK_RESPONSE_STATUS = {
    CONNECTED: 'connected'
  }

  initialize = (): void => {
    // config facebook startUp
    (<any>window).fbAppID = this.appConfig.getConfig.FacebookAppId;
    (<any>window).fbAsyncInit = function () {
      let params = {
        appId: (<any>window).fbAppID,
        xfbml: true,
        version: 'v2.8',
        status: true,
        cookie: true
      };

      FB.init(params);
      FB.AppEvents.logPageView();
    };

    if (this.appConfig.getConfig.FacebookAppId) {
      (function (d) {
        var js,
          fjs = d.getElementsByTagName('script')[0];
        if (d.getElementById('facebook-jssdk')) return;
        js = d.createElement('script');
        js.id = 'facebook-jssdk';
        js.async = true;
        js.src = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
      }(document));
    }
  }

  // retorna o status do login do usuario no facebook
  getLoginStatus = (): Promise<facebook.AuthResponse> => {
    return new Promise((resolve, reject) => {
      FB.getLoginStatus((response: any) => {
        if (response.status === this.FACEBOOK_RESPONSE_STATUS.CONNECTED)
          resolve(response);
        else
          reject(response);

      });
    });
  };

  login = (): Promise<facebook.AuthResponse> => {
    return new Promise((resolve, reject) => {
      FB.login((response) => {
        if (response.authResponse)
          resolve(response);
        else
          reject(response);
      });
    });
  }

  logout = (): Promise<facebook.AuthResponse> => {
    return new Promise((resolve, reject) => {
      FB.logout((response) => {
        if (response.authResponse)
          resolve(response);
        else
          reject(response);

      });
    });
  }
}

Facebook应用程序位于客户端,处于调试模式,并且对网站和可以使用此应用程序的用户有一些限制。 记住!。在Chrome,IE和Firefox上运行正常。

我想念什么?有任何想法吗? 谢谢。

0 个答案:

没有答案