2014-02-09 66 views
3

Apple要求,沒有文字滾動透明狀態欄。iOS7狀態欄和inappbrowser(Phonegap Build)

我在我的Phonegap Build應用程序中使用了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); 
    } 

我已經看到了類似的問題上來here,但答案沒有解決我的問題。

回答

2

是的,這是正確的。在iPhone上,inAppbrowser忽略爲應用程序本身定義的定義(Cordova 3.4/IOS 7)。

此外,它在返回到應用程序時會將其擦除(在我的定義中,我將狀態欄定義爲透明並保留在應用程序主體之上)。

+0

是否有反正當它返回到應用程序無法抹去的呢? – hllau

+0

找到了答案。將「基於視圖控制器的狀態欄外觀」設置爲「是」會使狀態文本在返回到應用程序時重新出現。 – hllau

+2

您的回答有效,謝謝。但仍然存在inAppbrowser不尊重應用程序狀態欄定義的問題。我會盡量扭轉局面,如果它能奏效,我會在這裏發佈。 –

2

我找到了一種方法來解決這個問題:你編輯CDVInAppBrowser.m文件,並在此塊:

if (self = [super init]) { 
    // default values 
    self.location = YES; 
    self.toolbar = YES; 
    self.closebuttoncaption = nil; 
    self.toolbarposition = kInAppBrowserToolbarBarPositionBottom; 

變化的底部到頂部:-) 有可以做其他事情,但這以簡單的方式殺死問題。

+0

看起來像這只是iOS – mu3

1

當您打開InAppBrowser時,您的應用程序及其所有JS都會暫停,因此無論您嘗試在應用程序中放置多少腳本以控制IAB,都不會影響其實際打開後的狀態。

但是,如果你設置了工具欄的位置選項頂部,將移動瀏覽器從屏幕頂部底部控制。瀏覽器chrome將佔用狀態欄,當您向上滾動內容時,它將充分隱藏在控件下方。

這是一種解決方案,但它沒有強烈的編碼或重寫插件。

如何做到這一點:

在config.xml文件,確保你指定InAppBrowser插件:

<gap:plugin name="org.apache.cordova.core.inappbrowser" />

那麼無論你打開瀏覽器:

window.open('YOUR-URL-HERE', '_blank', 'toolbarposition=top');

您可以通過fi在InAppBrowser GitHub readme中找到更多可自定義的選項。

+0

這不適用於ios,仍然看到狀態欄 –

0

我正在使用cordova-plugin-inappbrowser,並且這些問題與iOS中的狀態欄完全相同。我在這裏嘗試了一些建議,並嘗試插入CSS()來調整頂部的邊距,但似乎沒有任何效果。最後,安裝org.apache.cordova.statusbar插件,並簡單地調用StatusBar.overlaysWebView(false);糾正了這個問題。

你可以閱讀更多關於statusbar plugin here。解決方案由neilsteventon提供。

+0

你在哪裏叫它?看起來它不會影響IAB。 – mu3

0

要進一步擴展@alexkb,解決方案是掛入InAppBrowser的退出事件,以便返回到頁面後,statusBar將正確顯示。

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

這種固定的問題,我隱藏和顯示狀態欄時,在應用程序關閉瀏覽器

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