2017-04-04 1 views
0

Je crée une application Apache Cordova. J'ai ajouté le plugin InAppBrowser et le plugin scanner de code-barres qui est appelé à partir de la page ouverte dans InAppBrowser via une communication inter-navigateur. Il fonctionne parfaitement bien sous Android. Mais lorsqu'il est exécuté dans iOS, InAppBrowser agit comme une fenêtre contextuelle modale et ne laisse pas apparaître l'analyseur de code à barres tant que l'InAppBrowser n'est pas fermé/rejeté.Cordova iOS - InAppBrowser toujours sur la première édition

J'ai confirmé que le lecteur de code-barres fonctionne même en arrière-plan, mais il n'apparaîtra tout simplement pas parce que l'InAppBrowser est toujours en haut.

Je pense qu'il pourrait y avoir une solution de contournement pour donner un maximum de z-index plugin scanner de code à barres, mais je ne peux pas comprendre comment.

J'ai également essayé de masquer l'InAppBrowser, mais cela ne fonctionnait pas dans iOS. Mon idée est d'étendre mon site Web pour utiliser des fonctionnalités natives lors de l'exécution à partir de son application mobile.

Répondre

0

J'ai oublié d'ajouter une réponse ici. Mais je l'ai réparé le jour suivant. La solution est très simple, j'ai changé les méthodes de masquer et d'afficher des InAppBrowser à ce qui suit:

- (void)hide:(CDVInvokedUrlCommand*)command { 
self.inAppBrowserViewController.viewController.hidden = YES; 
} 

- (void)hide:(CDVInvokedUrlCommand*)command { 
self.inAppBrowserViewController.viewController.hidden = NO; 

}

0

J'ai eu le même problème. Il y a déjà un problème ouvert au https://issues.apache.org/jira/browse/CB-12586, ce qui m'a aidé à le réparer. Le propriétaire du problème a trouvé une solution en modifiant le code de la méthode hide() du plugin InAppBrowser dans votre dossier iOS (par exemple, YourApp/plates-formes/ios/YourApp/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser). m). Après application de la solution proposée ma méthode cacher ressemblait à ceci:

- (void)hide:(CDVInvokedUrlCommand*)command 
{ 
    if (self.inAppBrowserViewController == nil) { 
     NSLog(@"Tried to hide IAB after it was closed."); 
     return; 


    } 
    if (_previousStatusBarStyle == -1) { 
     NSLog(@"Tried to hide IAB while already hidden"); 
     return; 
    } 

    _previousStatusBarStyle = [UIApplication sharedApplication].statusBarStyle; 

    __weak CDVInAppBrowser* weakSelf = self; 

    // Run later to avoid the "took a long time" log message. 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     if (weakSelf.inAppBrowserViewController != nil) { 
      _previousStatusBarStyle = -1; 
      [weakSelf.inAppBrowserViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
     } 
    }); 
} 

Après la prochaine « build cordova », les méthodes de masquage travaillé pour moi. Faites-moi savoir, si vous avez trouvé une meilleure solution.