Cordova iOS - InAppBrowser всегда в топ-выпуске
Я создаю приложение Apache Cordova. Я добавил плагин InAppBrowser и плагин сканера штрих-кода, который вызывается со страницы, открытой внутри InAppBrowser через кросс-браузерную связь. Он отлично работает в Android. Но когда запускается в iOS, InAppBrowser действует как модальное всплывающее окно и не позволяет сканеру штрих-кода появляться, пока InAppBrowser не будет закрыт / закрыт.
Я подтвердил, что сканер штрих-кода работает даже в фоновом режиме, но он просто не появится, потому что InAppBrowser всегда находится сверху.
Я думаю, что мог бы быть обходной путь, чтобы дать плагину сканера штрих-кода максимальный z-индекс, но я не могу понять, как.
Я также пытался скрыть InAppBrowser, но он не работал в iOS.
cordova.InAppBrowser.hide();
Моя идея состоит в том, чтобы расширить свой сайт, чтобы использовать нативные функции при запуске из своего мобильного приложения.
2 ответа
Я забыл добавить ответ здесь. Но я исправил это на следующий день. Исправление очень простое, я изменил методы скрытия и показа InAppBrowser следующим образом:
- (void)hide:(CDVInvokedUrlCommand*)command {
self.inAppBrowserViewController.viewController.hidden = YES;
}
- (void)hide:(CDVInvokedUrlCommand*)command {
self.inAppBrowserViewController.viewController.hidden = NO;
}
У меня была такая же проблема. На https://issues.apache.org/jira/browse/CB-12586 уже открыта проблема, которая помогла мне ее исправить.
Владелец проблемы нашел решение, изменив код метода hide() плагина InAppBrowser в папке iOS (например, YourApp/platform /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];
}
});
}
После следующей "сборки кордовы" у меня сработали методы скрытия. Дайте мне знать, если вы нашли лучшее решение.