iOS7状态栏和InApp浏览器(Phonegap构建)

iOS7状态栏和InApp浏览器(Phonegap构建),ios7,phonegap-build,inappbrowser,Ios7,Phonegap Build,Inappbrowser,苹果公司要求,没有文本滚动通过其透明的状态栏 我正在使用PhonegapBuild应用程序中的inAppBrowser插件,它正好遇到了这个问题。出于某种原因,应用浏览器中的inAppbrowser会忽略我为应用程序设置的背景,而只是在状态栏对象后面显示网站 我正在使用StatusBarPlugin控制我的状态栏 Javascript: document.addEventListener("deviceready", onDeviceReady, false); // Global I

苹果公司要求,没有文本滚动通过其透明的状态栏

我正在使用PhonegapBuild应用程序中的
inAppBrowser
插件,它正好遇到了这个问题。出于某种原因,应用浏览器中的
inAppbrowser
会忽略我为应用程序设置的背景,而只是在状态栏对象后面显示网站

我正在使用
StatusBarPlugin
控制我的状态栏 Javascript:

document.addEventListener("deviceready", onDeviceReady, false);

    // Global InAppBrowser reference
    var iabRef = null;
    function iabLoadStart(event) {
        StatusBar.hide();
    }
    function iabLoadStop(event) {
    }
    function iabClose(event) {
         StatusBar.show();
         iabRef.removeEventListener('loadstart', iabLoadStart);
         iabRef.removeEventListener('loadstop', iabLoadStop);
         iabRef.removeEventListener('exit', iabClose);
    }    
    function openPage(url) {
    window.open(url, '_blank', 'location=yes,enableViewportScale=yes,');
    }
    // STATUS Bar
    function setStatusBar() {
    StatusBar.show();
    StatusBar.overlaysWebView(false);
    StatusBar.backgroundColorByHexString("#C8DB2F");
    }
    // Cordova is ready
    //
    function onDeviceReady() {
         checkConnection();
         setStatusBar();
         iabRef.addEventListener('loadstart', iabLoadStart);
         iabRef.addEventListener('loadstop', iabLoadStop);
         iabRef.addEventListener('exit', iabClose);
    }

我看到类似的问题不断出现,但答案并没有解决我的问题。

是的,没错。在iPhone上,iApp浏览器忽略了为应用程序本身所做的定义(Cordova 3.4/IOS 7)


此外,当它返回到应用程序时,它会将其删除(在我的定义中,我将状态栏定义为透明的,并保持在应用程序主体的顶部)。

我找到了一种解决此问题的方法:编辑CDVInAppBrowser.m文件,并在此块中:

if (self = [super init]) {
    // default values
    self.location = YES;
    self.toolbar = YES;
    self.closebuttoncaption = nil;
    self.toolbarposition = kInAppBrowserToolbarBarPositionBottom;
将底部更改为顶部:-)
还有其他事情可以做,但这可以用一种简单的方式解决问题。

当你打开InApp浏览器时,你的应用程序和它的所有JS都会暂停,因此无论你试图在应用程序中添加多少脚本来控制IAB,一旦它真正打开,这些都不会有任何影响

但是,如果将工具栏位置选项设置为顶部,则会将浏览器控件从屏幕底部移动到顶部。浏览器chrome将显示状态栏,当您向上滚动内容时,它将充分隐藏在控件下面

这是一种黑客解决方案,但它不需要大量编码或重新编写插件

如何做:

在config.xml文件中,确保指定了InAppBrowser插件:

然后,无论您在何处打开浏览器:

window.open('YOUR-URL-HERE','u blank','toolbarposition=top')


您可以在中找到更多可自定义的选项。

我在应用浏览器中使用cordova插件,并且iOS中的状态栏也存在这些完全相同的问题。我在这里尝试了一些建议,并尝试插入rtcss()来调整顶部的边距,但似乎没有一个有效。最后,安装org.apache.cordova.statusbar插件,只需调用
statusbar.overlyswebview(false)已更正该问题


你可以阅读更多关于这本书的内容。解决方案由提供。

要进一步扩展@alexkb,解决方案是挂接InApp浏览器的退出事件,以便在返回页面后,状态栏将正确显示

myinapp = window.open('YOUR-URL-HERE', '_blank', 'toolbarposition=top');
myinapp.addEventListener('exit', function (event) {
    StatusBar.overlaysWebView(true);
    StatusBar.overlaysWebView(false);
});

这为我解决了当应用内浏览器关闭时隐藏和显示状态栏的问题

var ref = window.open('http://google.com', '_blank');
ref.addEventListener('exit', function(event) {
    StatusBar.hide();
    StatusBar.show();
});

当它返回到应用程序时,是否有任何方法不删除它?找到答案。将“基于视图控制器的状态栏外观”设置为“是”,将使状态文本在返回应用程序时重新出现。您的答案有效,谢谢。但仍然存在inAppbrowser不遵守应用程序状态栏定义的问题。我会尝试一个转机,如果它有效的话,我会在这里发布。你把它叫做什么?看起来它不会影响IAB。看起来这只是iOS。这在iOS上不起作用,仍然可以看到状态栏