2016-05-13 8 views
0

Ich arbeite für eine Hybrid-Mobile-App mit Cordova 6.0.0.Cordova IOS-Kamera-Plugin funktioniert nicht beim Versuch, von inappbrowser zu öffnen

Entsprechend meiner Anforderungen muss ich dynamische URL in der Netzansicht öffnen. Die URL würde durch eine API-Antwort bereitgestellt werden.

Ich verwende das cordova in app browser Plugin für die Webansicht.

https://github.com/apache/cordova-plugin-inappbrowser

Nun, wenn der Benutzer auf einen Link in der Seite in der Web-Ansicht geöffnet klickt, ich habe das Click-Ereignis zu fangen und den href Wert des Anker-Tag zu finden, auf dem Benutzer geklickt hatte.

Und wenn die Ziel-URL meine Bedingung erfüllt, muss ich die Kamera öffnen, ohne die Web-Ansicht zu schließen, so dass ich den Zustand der Web-Ansicht auch nach der erfolgreichen Aufnahme beibehalten kann.

Für Kamera-Funktionalität verwende ich cordova Standard-Kamera-Plugin.

Ich habe dies erfolgreich in Android getan.

Aber im Falle von IOS kann ich die Kamera nicht öffnen. Wie ich die Kontrolle überprüft haben in der Kamera-Plugin wird, aber es wird geben unter Warnung

Warning: Attempt to present <CDVCameraPicker: 0x1570d1800> on <MainViewController: 0x1565624a0> whose view is not in the window hierarchy! 

Ich habe viele Beiträge in Bezug auf diese und einige Völker haben Iframe Ansicht anstelle von Web vorgeschlagen geprüft zu verwenden. Aber ich kann das Klickereignis in dynamisch geladenem Iframe nicht abfangen.

Kann mir bitte jemand helfen, was sollte die Lösung dafür sein, gibt es eine Möglichkeit, wie ich dies nach meinen Anforderungen tun kann.

Vielen Dank im Voraus

+0

Haben Sie die gleiche Warnung. Der Versuch, navigator.camera in einem jQuery-Click-Ereignishandler aufzurufen – tfmontague

Antwort

0

Vor kurzem hatte ich das gleiche Problem und schaffte es zu lösen. Sie müssen den InaAppBrowser als Unteransicht öffnen, um die Kamera darüber anzuzeigen. Alle Änderungen finden im CDVInAppBrowser.m beim InAppBrowser-Plugin statt.

Sie haben die Show-Methode von CDVInAppBrowser zu ändern:

dispatch_async(dispatch_get_main_queue(), ^{ 
    if (weakSelf.inAppBrowserViewController != nil) { 
     //[weakSelf.viewController presentViewController:nav animated:YES completion:nil]; 
     self.inAppBrowserViewController.view.frame = CGRectMake(0,20,self.inAppBrowserViewController.view.frame.size.width,self.inAppBrowserViewController.view.frame.size.height-20);    
     [self.viewController.view addSubview:self.inAppBrowserViewController.view]; 
    } 
}); 

einfach die Kommentarzeile entfernen und die 2 nach der Kommentarzeile hinzufügen. In der Nähe Methode von CDVInAppBrowser muss man hinzufügen:

UIView *lastView; 
for(UIView *subview in [self.viewController.view subviews]) { 
    lastView = subview; 
} 
[lastView removeFromSuperview]; 

Recht vor [self.inAppBrowserViewController close];.
Fertig, die Kamera öffnet sich nun über dem inappbrowser und übergibt das Bild an sie.

ps .: Denken Sie daran, die ios-Plattform zu entfernen und hinzuzufügen, um die Änderungen zu übernehmen

Verwandte Themen