尝试从inappbrowser打开时,Cordova IOS相机插件无法正常工作

时间:2016-05-13 20:24:54

标签: jquery cordova cordova-plugins inappbrowser

我正在使用cordova 6.0.0为混合移动应用程序工作。

根据我的要求,我必须在网页视图中打开动态网址。网址将由api响应提供。

我在app浏览器插件中使用cordova进行网页浏览。

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

现在,当用户点击Web视图中打开的页面中的任何链接时,我必须捕获该click事件并找到用户单击的锚标记的href值。

如果目标网址符合我的条件,我必须在不关闭网页视图的情况下打开相机,这样即使成功拍摄照片,我也可以保持网页视图的状态。

对于相机功能,我使用的是cordova默认相机插件。

我在Android中成功完成了这项工作。

但是在IOS的情况下,我无法打开相机。正如我已经检查过控制器正在进入相机插件,但它正在提供以下警告

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

我已经查了很多关于此的帖子,有些人建议使用iframe而不是网页浏览。但是我无法在动态加载的Iframe中捕获click事件。

有人可以帮助解决这个问题的解决方案,有什么方法可以按照我的要求来做到这一点。

提前致谢

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题,并设法解决了这个问题。您必须打开InaAppBrowser作为子视图以在其上显示摄像头。如果是InAppBrowser插件,则所有修改都在CDVInAppBrowser.m中进行。

您必须修改CDVInAppBrowser的show方法:

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

只需删除注释行,然后在注释行后添加2。在CDVInAppBrowser的close方法中,您必须添加:

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

[self.inAppBrowserViewController close];之前 完成后,相机现在会在inappbrowser的顶部打开并将图像传递给它。

p.s。:记得删除并添加ios平台以应用更改