Cordova IOS camera plugin not working when trying to open from inappbrowser

萝らか妹 提交于 2020-01-14 06:26:28

问题


I am working for a hybrid mobile app using cordova 6.0.0.

According to my requirements , I have to open dynamic url in web view. The url would be provided by api response.

I am using the cordova in app browser plugin for web view.

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

Now when user clicks on any link in the page opened in the web view , I have to catch that click event and find the href value of the anchor tag on which user had clicked.

And if target url will match my condition , i have to open camera without closing the web view , so that i can maintain the state of web view even after picture was taken successfully.

For camera functionality i am using cordova default camera plugin.

I have done this successfully in Android.

But in case of IOS i am not able to open camera. As i have checked the control is going inside the camera plugin , but it is giving below warning

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

I have checked many posts regarding this and some peoples have suggested to use Iframe instead of web view. But i am not able to catch the click event in dynamically loaded Iframe.

Can someone please help what should be the solution for this , is there any way i can do this as per my requirements.

Thanks in advance


回答1:


I recently had the same problem and managed to solve it. You have to open the InaAppBrowser as a subview to show the camera on top of it. All modifications take place in the CDVInAppBrowser.m if the InAppBrowser plugin.

You have to modify the show method of CDVInAppBrowser:

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];
    }
});

Just remove the commented line and add the 2 following the commented line. In the close method of CDVInAppBrowser you have to add:

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

right before [self.inAppBrowserViewController close];.
Done, the camera now opens on top of the inappbrowser and passes the image to it.

p.s.: remember to remove and add the ios platform in order to apply the changes



来源:https://stackoverflow.com/questions/37218829/cordova-ios-camera-plugin-not-working-when-trying-to-open-from-inappbrowser

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!