2016-05-19 4 views
0

Ich verwende derzeit, IONIC v1.0.0, AngularJs und ngCordova v0.1.23-alpha auf iOS und Android.ngCordova InAppBrowser Plugin einfrieren App auf iOS aber nicht auf Android

Ich bin auf ein Problem mit meiner Login-Ansicht Einfrieren gestoßen. Es geschieht nach dem Öffnen von InAppBrowser und "Zurück zur App" (Schließen Schaltfläche Beschriftung für IOS verwendet, um wieder zu bekommen) friert meine Login-Ansicht deaktivieren die Fähigkeit auf dem ganzen Bildschirm zu berühren und mich nicht einloggen können. Es passiert nur, wenn ich InAppBrowser beim Start der App anrufe, wenn ich es während des App-Lebenszyklus benutze (nach dem Login), es tut es nicht.

Hier einige meiner Code Stücke sind

In app.js:

 
angular.module('MyApp', ['ionic', 'MyApp', 'ngCordova', 'mainController', 'loginController', 'pascalprecht.translate', 'ngStorage', 'ngSanitize', 'ngAnimate', 'ngTouch', 'ngCookies', 'ngLocale', 'testController']) 

In mainController Ich habe Fabrik:

 

.factory('customMainFunction', function ($rootScope, $ionicLoading, $ionicScrollDelegate, $ionicPopup, 
    $timeout, $localStorage, $location, $ionicHistory, $window, $cordovaInAppBrowser) { 

    var Token = ""; 

    return { 

openBrowser: function (link) { 

      var options = { 
       location: 'yes', 
       clearcache: 'yes', 
       toolbar: 'yes', 
       closebuttoncaption: 'Back to App' 
      }; 

      document.addEventListener("deviceready", function() { 
       $cordovaInAppBrowser.open(link, '_blank', options) 
        .then(function (event) { 
         // success 
        }) 
        .catch(function (event) { 
         // error 
        }); 

      }, false); 


      $rootScope.$on('$cordovaInAppBrowser:loadstart', function (e, event) { 

       //console.log(event); 
       var url = ""; 
       var positionNumber; 
       var res; 

       url = event.url;     
       positionNumber = url.search("ssoToken=");        
       res = url.substr(Number(positionNumber)+9); 

       /*positionNumber = url.search("module=");      
       res = url.substr(Number(positionNumber)+6);*/ 

       if(url !== "" && positionNumber >= 0 && res.length > 0) { 

        $rootScope.$broadcast('ssoToken', { token: res });    
        $cordovaInAppBrowser.close(); 
       } 

      }); 

      $rootScope.$on('$cordovaInAppBrowser:loadstop', function (e, event) { 
       console.log("loadstop"); 
       //console.log(event); 

       // insert CSS via code/file 
       //$cordovaInAppBrowser.insertCSS({ 
       // code: '' 
       //}); 

       // insert Javascript via code/file 
       //$cordovaInAppBrowser.executeScript({ 
       // file: '' 
       //}); 
      }); 

      $rootScope.$on('$cordovaInAppBrowser:loaderror', function (e, event) { 

      }); 

      $rootScope.$on('$cordovaInAppBrowser:exit', function (e, event) { 

      }); 

     } 
    } 
}) 

Wenn jemand eine solche Frage hat begegnen lassen Sie es mich wissen Was kann getan werden, um es zu lösen? Jede Frage oder Klarstellungen lassen mich wissen. Danke im Voraus.

Antwort

0

Das Problem meines eigenen Problems gefunden. Grundsätzlich hängt das Problem mit Threading zusammen. Look for Threading. Wie habe ich davon erfahren? Auf XCode konnte ich eine Nachricht sehen:

GEWINDE ACHTUNG: ['InAppBrowser'] nahm '108,12' ms. Plugin sollte verwenden, um einen Hintergrund-Thread


Es gibt zwei Möglichkeiten, dies zu lösen (glaube ich):

1- Mit Hintergrund Threading (genau wie die Meldungszustände). Siehe auch: How to run cordova plugins in the background?

2- Wickeln Sie den openBrowser Funktionsaufruf (in meinem Fall) in einen setTimeout. Dadurch wird der Anruf verzögert, bis der Thread fertig ist und die Benutzeroberfläche nicht blockiert wird. Sobald dies erledigt war (in meinem Fall), öffnete es den inAppBrowser und wenn ich auf "Zurück zur App" klickte, wurde die Benutzeroberfläche überhaupt nicht blockiert.

Hoffe das hilft jemand da draußen.

+0

Ich habe das gleiche Problem. Ich habe den Punkt 2, den Sie oben erwähnt haben, versucht. Für Punkt 1 habe ich die Methode openInSystem in CDVInAppBrowser.m geändert, um die Zeile dispatch_async (dispatch_get_main_queue(),^{ [[UIApplication sharedApplication] openURL: url]; aber ich bekomme immer noch das Problem. Irgendwelche Ideen? }); –

+0

Hallo, @the_best Ich bin ein wenig verwirrt, ich muss den browser.on ('loadstart') oder inAppBrowser.create() umbrechen, der das Plugin aufruft. –

+0

browser = this.iab.create (this.url, '_blank', Optionen); let Hörer = browser.on ('loadstart') browser.on ('loadstop') browser.on ('Loaderror') browser.on ('exit') Ich verwende das folgende Ereignis auf dem Ich muss das Timeout einstellen? –

Verwandte Themen