2015-07-24 1 views
2

Je suis en train d'obtenir les contacts de Google en utilisant api javascript:Google fenêtre d'authentification api fermée rappel

$(document).on('click', '#connect_to_google', function() { 
    $('body').addClass('loading'); 
    var config = { 
     client_id: GOOGLE_CP_CIENT_ID, 
     scope: 'https://www.google.com/m8/feeds' 
    }; 

    gapi.auth.init(function() { 
     gapi.auth.authorize(config, function() { 
      var token = gapi.auth.getToken(); 

      if (null !== token && (typeof token.access_token !== 'undefined')) { 
       $.ajax({ 
        url: "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + token.access_token + "&alt=json&v=3.0", 
        dataType: "json", 
        cache: false, 
        success: function(data) { 
         //doStuff(data); 
         $('body').removeClass('loading'); 
        }, 
        error: function (xhr, error) { 
         $('body').removeClass('loading'); 
        }, 
        complete: function (xhr, error) { 
         $('body').removeClass('loading'); 
        } 
       }); 

      } else { 
       $('body').removeClass('loading'); 
      } 

     });   

    }); 
}); 

Le moment où le client clique sur le bouton de connexion, la page affiche une couche sur elle ($('body').addClass('loading');), pour restreindre toute interaction de l'utilisateur en dehors de la page d'authentification google. Tout fonctionne bien, sauf dans le cas où l'utilisateur ferme manuellement la fenêtre google auth, rien ne se passe. Y at-il un moyen de vérifier si l'utilisateur a fermé cette fenêtre, pour appeler le $('body').removeClass('loading');?

Ou existe-t-il un moyen d'ouvrir la fenêtre gapi.auth.authorize dans un conteneur de dialogue modal? De cette façon, je pourrais très facilement vérifier son statut.

Répondre

2

Cela semble faire l'affaire:

(function(wrapped) { 
    window.open = function() { 
     var win = wrapped.apply(this, arguments); 
     var i = setInterval(function() { 
      if (win.closed) { 
       clearInterval(i); 
       $('body').removeClass('loading'); 
      } 
     }, 100); 
    }; 
})(window.open); 

Ce n'est pas la meilleure solution, mais il fait le travail