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;

}