Вход в Facebook зависает на «XD Proxy», когда установлена ​​страница через Chrome Web Store

Создал следующее веб-приложение:

http://www.web-allbum.com/

Я также Добавил его в веб-магазин Chrome:

https://chrome.google.com/webstore/detail/idalgghnjhmnbgbeebpdolhgdpbcplf

Проблема в том, что когда перейти к веб-магазину Chrome Web и установка этого приложения Вход в Facebook Windows зависает в Окно «XD прокси». Хотя сам Connect работает, это пустое окно может запутать пользователей.

Я сделал свое исследование, и это кажется хромированным вопросом: https://code.google.com/p/chromium/issues/detail?id=59285#C26

Если вы удалите приложение из Chrome, проблема исчезает.

Есть ли обходной путь для этой проблемы?

Подобные вопросы стойки:

Это мой Facebook Connect в случае, если он поможет:

    FB.init({
        appId  : window.__FACEBOOK_APP_ID__,
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml  : true, // parse XFBML
        channelUrl : window.__MEDIA_URL__ + 'channel.html', // channel.html file
        oauth  : true // enable OAuth 2.0
    });


    FB.XD.Flash.init();
    FB.XD._transport = "flash";

    if (A.networks.facebook.connected) {
        FB.getLoginStatus(function (response) {
            // Stores the current user ID for later use
            that.network_id = response.authResponse.userID;

            if (!response.authResponse) {
                // no user session available, someone you dont know
                A.networks.facebook.connected = false;
            }
            callback();
        });
    }
    else {
        callback();
    }
}; 

Решение

Благодаря ответу Reekogi, я смог обойти эту проблему. Вот полная реализация:

, чтобы избежать проблемы прокси XD, вам нужно подключить к Facebook без использования FB.Login, это может быть достигнуто путем перенаправления вручную перенаправления пользователя на страницу Facebook.

У меня была эта функция входа в систему в моем коде:

_facebook.connect_to_network = function (callback) {
    FB.login(function (response) {
        if (response.authResponse) {
            console.log('Welcome!  Fetching your information.... ');
            FB.api('/me', function (response) {
                // Stores the current user Id for later use
                that.network_id = response.id;
                console.log('Good to see you, ' + response.name + '.');
                callback();
            });
        }
        else {
            console.log('User cancelled login or did not fully authorize.');
            that.connected = false;
            callback();
        }

    }, {scope: window.__FACEBOOK_PERMS__});
};

, которые я заменил на этот код:

_facebook.connect_to_network = function (callback) {
    var url = 'https://www.facebook.com/connect/uiserver.php?app_id=' + window.__FACEBOOK_APP_ID__ + '&method=permissions.request&display=page&next=' + encodeURIComponent(window.__BASE_URL__ + 'authorize-window?my_app=facebook&my_method=login') + '&response_type=token&fbconnect=1&perms=' + window.__FACEBOOK_PERMS__;

    window.open(url);
};

Новый код открывает всплывающее окно, которое подключается к Facebook и возвращает к URL, указанному в следующем параметре. Я добавил некоторые дополнительные параметры в этом URL обратного вызова, чтобы код JavaScript может проверить его и закрыть всплывающее окно.

Этот код выполнен, когда Facebook перенаправляет к URL-адресу обратного вызова:

_facebook.parse_url_params = function () {
    // This is the popup window
    if (URL_PARAMS.my_method === 'login') {
        window.opener.A.networks.facebook.connected = true;
        self.close();
    }
};

URL_Params - это просто объект помощника, который содержит все параметры URL.

Я до сих пор считаю, что это проблема хрома, но поскольку этот обходной путь работал и решил мою проблему, я отмечаю этот вопрос, как решается.

12
задан Community 23 May 2017 в 11:53
поделиться