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