Cordova iOS - InAppBrowser 总是最重要的问题
Cordova iOS - InAppBrowser always on top issue
我正在创建 Apache Cordova 应用程序。我添加了 InAppBrowser 插件和条形码扫描器插件,它们通过跨浏览器通信从 InAppBrowser 内打开的页面调用。 运行 在 Android 中完全没问题。但是当 运行 in iOS 时,InAppBrowser 就像一个模态弹出窗口一样,直到 InAppBrowser 为 closed/dismissed.
才让条码扫描仪出现
我已经确认条形码扫描仪即使在后台也能正常工作,但它不会出现,因为 InAppBrowser 始终在顶部。
我认为可能有一种解决方法可以为条形码扫描仪插件提供最大 z-index,但我不知道该怎么做。
我也试过隐藏 InAppBrowser,但它在 iOS 中不起作用。
cordova.InAppBrowser.hide();
我的想法是扩展我的网站以在 运行 来自其移动应用程序时使用本机功能。
我确实遇到了同样的问题。 https://issues.apache.org/jira/browse/CB-12586 上已经有一个未解决的问题,它帮助我解决了它。
问题的所有者通过更改 iOS 文件夹(例如 YourApp/platforms/ios/YourApp/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.m)中 InAppBrowser 插件的 hide() 方法的代码找到了解决方案。应用建议的解决方案后,我的隐藏方法如下所示:
- (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 build" 之后,隐藏方法对我有用。如果您找到更好的解决方案,请告诉我。
我忘了在这里添加答案。但是我第二天就修好了。修复非常简单,我将 InAppBrowser 的隐藏和显示方法更改为以下内容:
- (void)hide:(CDVInvokedUrlCommand*)command {
self.inAppBrowserViewController.viewController.hidden = YES;
}
- (void)hide:(CDVInvokedUrlCommand*)command {
self.inAppBrowserViewController.viewController.hidden = NO;
}
我正在创建 Apache Cordova 应用程序。我添加了 InAppBrowser 插件和条形码扫描器插件,它们通过跨浏览器通信从 InAppBrowser 内打开的页面调用。 运行 在 Android 中完全没问题。但是当 运行 in iOS 时,InAppBrowser 就像一个模态弹出窗口一样,直到 InAppBrowser 为 closed/dismissed.
才让条码扫描仪出现我已经确认条形码扫描仪即使在后台也能正常工作,但它不会出现,因为 InAppBrowser 始终在顶部。
我认为可能有一种解决方法可以为条形码扫描仪插件提供最大 z-index,但我不知道该怎么做。
我也试过隐藏 InAppBrowser,但它在 iOS 中不起作用。
cordova.InAppBrowser.hide();
我的想法是扩展我的网站以在 运行 来自其移动应用程序时使用本机功能。
我确实遇到了同样的问题。 https://issues.apache.org/jira/browse/CB-12586 上已经有一个未解决的问题,它帮助我解决了它。
问题的所有者通过更改 iOS 文件夹(例如 YourApp/platforms/ios/YourApp/Plugins/cordova-plugin-inappbrowser/CDVInAppBrowser.m)中 InAppBrowser 插件的 hide() 方法的代码找到了解决方案。应用建议的解决方案后,我的隐藏方法如下所示:
- (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 build" 之后,隐藏方法对我有用。如果您找到更好的解决方案,请告诉我。
我忘了在这里添加答案。但是我第二天就修好了。修复非常简单,我将 InAppBrowser 的隐藏和显示方法更改为以下内容:
- (void)hide:(CDVInvokedUrlCommand*)command {
self.inAppBrowserViewController.viewController.hidden = YES;
}
- (void)hide:(CDVInvokedUrlCommand*)command {
self.inAppBrowserViewController.viewController.hidden = NO;
}