我正在使用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事件。
有人可以帮助解决这个问题的解决方案,有什么方法可以按照我的要求来做到这一点。
提前致谢
答案 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平台以应用更改