我正在创建一个Apache Cordova应用程序。我添加了InAppBrowser插件和条形码扫描程序插件,该插件是通过跨浏览器通信从InAppBrowser内部打开的页面调用的。它在Android中运行得非常好。但是当在iOS中运行时,InAppBrowser就像一个模态弹出窗口,并且在InAppBrowser关闭/关闭之前不会出现条形码扫描器。
我已经确认条码扫描器即使在后台也能正常工作,但由于InAppBrowser始终处于最佳状态,因此它不会出现。
我认为可能有一种解决方法可以为条形码扫描程序插件提供最大的z-index,但我无法弄清楚如何。
我也试图隐藏InAppBrowser,但它在iOS中没有用。
cordova.InAppBrowser.hide();
我的想法是扩展我的网站,以便在从其移动应用运行时使用本机功能。
答案 0 :(得分:0)
我确实遇到了同样的问题。已经在https://issues.apache.org/jira/browse/CB-12586打开了一个问题,这有助于我解决问题。
问题的所有者通过更改iOS文件夹中InAppBrowser插件的hide()方法的代码找到了解决方案(例如YourApp / platforms / ios / YourApp / Plugins / cordova-plugin-inappbrowser / CDVInAppBrowser.m )。应用建议的解决方案后,我的隐藏方法如下所示:
- (void)hide:(CDVInvokedUrlCommand*)command
{
if (self.inAppBrowserViewController == nil) {
NSLog(@"Tried to hide IAB after it was closed.");
return;
}
if (_previousStatusBarStyle == -1) {
NSLog(@"Tried to hide IAB while already hidden");
return;
}
_previousStatusBarStyle = [UIApplication sharedApplication].statusBarStyle;
__weak CDVInAppBrowser* weakSelf = self;
// Run later to avoid the "took a long time" log message.
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
if (weakSelf.inAppBrowserViewController != nil) {
_previousStatusBarStyle = -1;
[weakSelf.inAppBrowserViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}
});
}
在下一次" cordova构建"之后,隐藏方法对我有效。请告诉我,如果您找到了更好的解决方案。
答案 1 :(得分:0)
我忘记在这里添加答案。但是我第二天修好了。修复非常简单,我将隐藏和显示InAppBrowser的方法更改为以下内容:
- (void)hide:(CDVInvokedUrlCommand*)command {
self.inAppBrowserViewController.viewController.hidden = YES;
}
- (void)hide:(CDVInvokedUrlCommand*)command {
self.inAppBrowserViewController.viewController.hidden = NO;
}