首页 文章

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

提问于
浏览
0

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

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

我在应用程序浏览器插件中使用cordova进行Web查看 .

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而不是Web视图 . 但是我无法在动态加载的Iframe中捕获click事件 .

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

提前致谢

1 回答

  • 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平台以应用更改

相关问题