FB.le dialogue de connexion ne se ferme pas sur Google Chrome

j'appelle FB.login() sur un événement de clic dans mon application. Le dialogue apparaît comme prévu, mais lorsque L'Utilisateur a terminé de se connecter à Facebook (et / ou d'autoriser l'application), le dialogue ne se ferme pas. Au lieu de cela, il charge une page blanche (dans la boîte de dialogue) et le titre change en XD Proxy .

cela ne se produit que sur Google Chrome (j'utilise la dernière version disponible sous Windows 7).

ce n'est pas se produire si Chrome est en mode Incognito.

le FB-login 'social plugin' fonctionne très bien sur Chrome.

pour tester/déboguer plus loin, j'ai créé une nouvelle application Facebook avec les paramètres vanilla. Le seul changement que j'ai fait était de définir L'URL du Site dans les paramètres de l'application. Voici le code HTML que vous pouvez utiliser pour recréer ce bug.

exemple de Code pour recréer l'émission

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Chrome Bug Test</title>
    </head>
    <body>
        <button onclick="dologin()">Login using Facebook</button>

        <div id="fb-root"></div>
        <script src="http://connect.facebook.net/en_US/all.js"></script>
        <script>
          FB.init({
            appId  : '[YOUR APP ID HERE]',
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true  // parse XFBML
          });
        </script>

        <script type="text/javascript">
            function dologin(){
                FB.login(function(r){
                    if(console && console.log) {
                        console.log(r);
                    }
                });
            }
        </script>

    </body>
</html>

Paramètres Facebook que j'ai essayé de changer

  1. définir un site Domaine, n'a rien changé.
  2. en utilisant un channelUrl personnalisé et un fichier channel, n'a pas aidé non plus.

bogues liés suivis sur Facebook

questions Connexes ici sur Stack Overflow

j'ai j'ai vu beaucoup de gens tomber dessus, mais ce qui me dérange c'est que je n'ai pas pu trouver de solution concrète pour ça. Facebook n'a pas encore répondu aux rapports de bogue. Une solution serait de se débarrasser du code D'authentification basé sur Javascript et le faire uniquement en utilisant serverside mécanisme (Facebook PHP SDK). J'aimerais éviter cela en raison de contraintes de temps.

Quelqu'un a une idée pour arranger ça?

40
demandé sur Community 2011-05-25 17:30:57

6 réponses

j'ai reçu un appel similaire à FB.login() pour fermer la boîte de dialogue en changeant

onclick="dologin()"

à

onclick="dologin(); return false;"
11
répondu Joe Rantala 2013-07-03 18:50:14

étant donné l'âge de ce post, je devine que l'affiche a résolu ceci; cependant, étant donné qu'il s'agit également d'une ressource pour d'autres qui cherchent à résoudre des problèmes similaires, j'ai pensé que je voudrais inclure mon expérience juste au cas où.

j'ai découvert que ce qui causait ce même symptôme de problème pour moi était l'oubli accidentel d'inclure event.preventDefault(); dans mon" clic " écouteur handler en jQuery. Le dialogue d'ouverture de session facebook surgissait et me permettant de me connecter mais ne disparaissant pas. Le problème était que le site web effectuait l'action de post de formulaire par défaut, qui interférait avec la fonction de rappel facebook.

7
répondu Chris Reedy 2015-08-06 08:30:57

j'ai eu exactement le même problème. J'ai fait deux choses, d'abord j'ai ajouté cette ligne juste avant l'appel FB.init() :

FB.Flash.hasMinVersion = function () { return false; };

puis je suis entré dans la page de l'application FB et j'ai ajouté le domaine du Site (i.e. test.com).

je pense que le réglage du domaine du site était la clé, mais je ne suis pas 100% positif. Tout ce que je sais, c'est qu'il semble toujours fermer maintenant dans tous les navigateurs, y compris Chrome.

6
répondu John Siladie 2013-07-03 18:54:44

brève réponse à la question ci-dessus:

chargez le script all.js sur https .

<script src="https://connect.facebook.net/en_US/all.js"></script>

réponse plus longue si vous cherchez à résoudre un problème similaire à la question originale:

utilisez Google Chrome pour tenter l'ouverture de session. Une fois que vous avez ouvert une session et que vous avez la fenêtre pop-up vierge accrochée à l'écran, appuyez sur F12 . Cela met en évidence les outils de développement pour Chrome. Cliquez sur L'onglet Console,et vous verrez l'erreur. Ce que vous allez probablement voir est lié aux questions XD (cross-domain).

même si votre problème particulier est différent de celui que j'avais, ce qui précède devrait vous mener dans la bonne direction.

mon problème/solution était spécifique la documentation Facebook C# SDK v6 - le code de tutoriel charge le tous.js script utilisant une URL qui commence par / / - qui charge ensuite le script à partir du même schéma que mon site (qui était http). Après m'être connecté, le pop-up a essayé de me rediriger de la connexion Facebook https vers mon site http et bingo, nous avons le problème XD. La solution était de charger spécifiquement les scripts de https://connect.facebook.net/en_US/all.js comme suit:

  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "https://connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));

Edit:

après quelques considérations, cette approche d'autoriser une redirection vers http pourrait compromettre la sécurité du système en permettant aux données de cette requête d'être lues par quelqu'un d'autre et ensuite réutilisées. Je n'ai pas pu trouver de documentation ou d'exemples pertinents et je n'ai donc pas pu conclure D'une manière ou d'une autre, YMMV.

5
répondu umbyersw 2013-07-03 18:56:24

appelant cet extrait après FB.init a fixé le problème pour moi. Mais d'autres solutions semblent avoir travaillé pour différents cas.

$.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());
if ($.browser.chrome || $.browser.msie) {
    FB.XD._origin = window.location.protocol + "//" + document.domain + "/" + FB.guid();
    FB.XD.Flash.init();
    FB.XD._transport = "flash";
  } else if ($.browser.opera) {
    FB.XD._transport = "fragment";
    FB.XD.Fragment._channelUrl = window.location.protocol + "//" + window.location.host + "/";
  }
2
répondu Jaffer 2013-07-03 18:53:50

j'ai connu le même problème dans IE9, et il semble provenir de la mise à niveau à Flash Player 10. Les réponses suggérées ne fonctionnaient déjà pas pour moi et j'avais perdu espoir en essayant de le corriger depuis la découverte d'un bug ouvert sur Facebook couvrant. Mais Henson a publié une réponse à une question similaire qui l'a fixé pour moi. Dans le JavaScript de mon maître de site j'ai enlevé ces lignes

    FB.UIServer.setLoadedNode = function (a, b) {
       //HACK: http://bugs.developers.facebook.net/show_bug.cgi?id=20168
        FB.UIServer._loadedNodes[a.id] = b;
    };

et maintenant ça fonctionne. (N.B. Je n'ai pas vérifié si le problème IE8 ces lignes étaient destinées à surmonter les retours.)

1
répondu dumbledad 2017-05-23 12:09:55