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];
        }
    });
}

После следующей "сборки кордовы" у меня сработали методы скрытия. Дайте мне знать, если вы нашли лучшее решение.

Другие вопросы по тегам