2016-01-07 3 views
0

Я использую плагин InAppBrowser (v1.1.1) с Cordova для процесса входа в систему OAuth. К сожалению, InAppBrowser, похоже, не закрывает браузер. Моя функция «closeBrowser» вместо этого постоянно вызывает интервал, и браузер остается на экране Android (я не пробовал другие устройства в это время.)InAppBrowser не закрывается?

Есть ли способ принудительно закрыть InAppBrowser, кроме .close(), или скрыть его? Или, может быть, в моем коде есть недостаток, который блокирует браузер.

LogInPage.prototype.handleExternalLogin = function (externalLogin) { 
    var _this = this; 

    var ref = window.open(Environment_1.settings.baseUrl + externalLogin.route.url, "_blank", "location=no"); 
    ref.addEventListener('loadstart', function (event) { 
     if (_.startsWith(event.url, Environment_1.settings.baseUrl + "/api/Account/account/ExternalLoginCallback")) { 
      // Now we want to load a different url that will give us the mobile access token 
      console.log('get external-mobile-token'); 
      _this.closeBrowser(ref); 

      var ref2 = window.open(Environment_1.settings.baseUrl + "/api/Account/external-mobile-token", "_blank" /*, "location=no"*/); 

      ref2.addEventListener('loadstop', function (event) { 
       console.log('loadstop ' + event.url); 
       if (event.url == Environment_1.settings.baseUrl + "/api/Account/external-mobile-token") { 
        ref2.executeScript({ code: 'window.document.documentElement.innerText' }, function (contents) { 
         _this.login(contents); 
         _this.closeBrowser(ref2); 
        }); 
       } 
      }); 

      ref2.addEventListener('loaderror', function (event) { 
       console.log(event); 
       _this.closeBrowser(ref2); 
       // TODO - do something? 
      }); 
     } 
    }); 

    ref.addEventListener('loaderror', function (event) { 
     console.log(event); 
     _this.closeBrowser(ref); 
     // TODO - do something? 
    }); 
}; 

LogInPage.prototype.closeBrowser = function (browser) { 
    var interval = setInterval(function() { 
     console.log('closing'); 
     browser.close(); 
    }, 10); 

    browser.addEventListener('exit', function() { 
     console.log('closed'); 
     clearInterval(interval); 
    }); 
}; 

LogInPage.prototype.login = function (token) { 
    console.log(token); 
}; 

Приведенный выше код фактически генерируется с помощью TypeScript, но я решил, что не буду путать проблему.

ответ

0

Похоже, что закрытие InAppBrowser и открытие другого в то же время вызывало проблему; переписывая процесс, чтобы только одно окно разрешило мою проблему.

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