6

Я использую клиент gapi в расширении chrome для доступа к Google Диску. Первый шаг - авторизовать мое приложение. Я использую gapi.auth.authorize, чтобы начать авторизацию. После того, как я авторизую приложение через всплывающее окно, запущенное в gapi, окно никогда не закрывается и не застревает, как показано на рисунке ниже. Однако авторизация преуспела в фоновом режиме, потому что, если я закрываю окно вручную, я не вижу застрявшего всплывающего окна в следующий раз. Может кто-нибудь указать, что я делаю неправильно?Google authorize popup застрял в расширении chrome

После нажатия ссылки 'Разрешить доступ' на всплывающее окно авторизации,

enter image description here

Затем он показывает пустой всплывающее окно, которое застряло

Popup gets stuck

код, который я с использованием

function handleClientLoad(){ 
     gapi.client.setApiKey('My API key'); 
     window.setTimeout(checkAuthAuto, 1); 
} 


var checkAuthAuto = function() { 
    console.log('checkAuthAuto'); 
    gapi.auth.authorize({ 
     client_id: 'My client id', 
     scope: 'https://www.googleapis.com/auth/drive.file', 
     immediate: true 
    }, handleAuthResult); 
} 



function handleAuthResult(authResult) { 
     console.log('handleAuthResult'); 
     var authButton = document.getElementById('authorizeButton'); 
     var filePicker = document.getElementById('filePicker'); 
     var addButton = document.getElementById('addButton'); 
     authButton.style.display = 'none'; 
     filePicker.style.display = 'none'; 
     addButton.style.display = 'none'; 
     if (authResult && !authResult.error) { 
      addButton.style.display = 'block'; 
      addButton.onclick = uploadFile; 
      console.log('handleAuthResult:noerror'); 

     } else { 
      // No access token could be retrieved, show the button to start the authorization flow. 
      authButton.style.display = 'block'; 

      console.log('handleAuthResult:error'); 
      console.log(authResult); 

      authButton.onclick = function() { 
       console.log('authButton.onclick'); 
       gapi.client.setApiKey('My api key'); 
       gapi.auth.authorize({ 
        client_id: 'My client id', 
        scope: 'https://www.googleapis.com/auth/drive.file', 
        immediate: false 
       }, handleAuthResult); 
       return false; 
      }; 
     } 
} 
+0

Я также пытаюсь проверить правильность настройки API-интерфейса API в правильной консоли API Google. Я указал источник javascript - «chrome-extension: // » и оставил пустой URL-адрес перенаправления. – plspl

+0

Здесь больше обсуждений - https://groups.google.com/forum/?fromgroups=#!topic/google-api-javascript-client/GuFxPzqQ9-0 – plspl

+0

Записанная проблема для этого в коде google для gapi команда, HTTPS: //code.google.com/p/google-api-javascript-client/issues/detail ID = 74. Пожалуйста, поддержите его. – plspl

ответ

0

Даже с хромированными расширениями вы можете использовать chrome.identity, и всплывающее окно закрывается так, как мы ожидаем.

Wrap chrome.identity.getAuthToken с оберткой с именем gapi.auth.authorize. Обратитесь к: https://github.com/GoogleChrome/chrome-app-samples/blob/master/gapi-chrome-apps-lib/gapi-chrome-apps.js

Дело в том, что текущий стабильный хром 28 не позволяет вам это делать, и вы можете также проверить версию или подождать некоторое время, пока стабильная не получит эту функциональность. Все еще не уверен, что делать это с расширениями хорошо, даже если бы я смог это сделать ...

+0

Все еще не зафиксировано в Chrome 33? У меня такая же проблема. – Imskull

+0

Думайте так. лучше попробуйте обходной путь. – goodhyun

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