2015-07-24 2 views
2

Я пытаюсь получить контакты из Google с помощью JavaScript API:окно аутентификации апи Google закрыл обратный вызов

$(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'); 
      } 

     });   

    }); 
}); 

В тот момент клиент нажимает на кнопку входа, на странице отображается слой над ним ($('body').addClass('loading');), для ограничения любого пользовательского взаимодействия вне страницы google auth. Все работает хорошо, за исключением ситуации, когда пользователь вручную закрывает окно auth google, тогда ничего не происходит. Есть ли способ проверить, закрыл ли пользователь это окно, чтобы позвонить $('body').removeClass('loading');?

Или есть ли способ открыть окно gapi.auth.authorize в модальном контейнере диалога? Таким образом, я мог бы очень легко проверить его статус.

ответ

2

Это, кажется, сделать трюк:

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

Это не лучшее решение, но это делает работу

Смежные вопросы