Cordova iOS - InAppBrowser始终处于首要问题

时间:2017-04-04 12:49:31

标签: ios cordova cordova-plugins barcode-scanner inappbrowser

我正在创建一个Apache Cordova应用程序。我添加了InAppBrowser插件和条形码扫描程序插件,该插件是通过跨浏览器通信从InAppBrowser内部打开的页面调用的。它在Android中运行得非常好。但是当在iOS中运行时,InAppBrowser就像一个模态弹出窗口,并且在InAppBrowser关闭/关闭之前不会出现条形码扫描器。

我已经确认条码扫描器即使在后台也能正常工作,但由于InAppBrowser始终处于最佳状态,因此它不会出现。

我认为可能有一种解决方法可以为条形码扫描程序插件提供最大的z-index,但我无法弄清楚如何。

我也试图隐藏InAppBrowser,但它在iOS中没有用。

cordova.InAppBrowser.hide();

我的想法是扩展我的网站,以便在从其移动应用运行时使用本机功能。

2 个答案:

答案 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;

}