2014-02-09 5 views
3

Apple требует, чтобы текст не прокручивался через их прозрачную строку состояния.Строка состояния iOS7 и inappbrowser (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 nd больше настраиваемых опций в 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(); 
}); 
Смежные вопросы