Строка состояния iOS7 и inappbrowser (сборка Phonegap)

Apple требует, чтобы через их прозрачную строку состояния не прокручивался текст.

Я использую плагин inAppBrowser в своем приложении Phonegap Build, которое сталкивается именно с этой проблемой. По какой-то причине 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);
    }

Я видел подобные вопросы, возникающие здесь, но ответы не помогли моя проблема.


person 5mark    schedule 09.02.2014    source источник


Ответы (6)


Да, это правильно. На iPhone inAppbrowser игнорирует определения, сделанные для самого приложения (Cordova 3.4/IOS 7).

Кроме того, он стирает его, когда возвращается в приложение (в своих определениях я определил, что строка состояния должна быть прозрачной и оставаться поверх тела приложения).

person Miguel Lopes    schedule 10.03.2014
comment
Есть ли способ не стереть его, когда он вернется в приложение? - person hllau; 12.03.2014
comment
Ответ найден. Если задать для параметра «Внешний вид строки состояния на основе контроллера просмотра» значение «Да», текст состояния снова появится, когда он вернется в приложение. - person hllau; 12.03.2014
comment
Ваш ответ работает, спасибо. Но по-прежнему остается проблема inAppbrowser, не учитывающая определения строки состояния приложения. Попробую переделать, если получится, отпишусь здесь. - person Miguel Lopes; 13.03.2014

Я нашел способ решить эту проблему: вы редактируете файл CDVInAppBrowser.m и в этом блоке:

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

измените низ на верх :-) Есть и другие вещи, которые можно сделать, но это решает проблему простым способом.

person Miguel Lopes    schedule 01.04.2014
comment
Похоже, это только для iOS - person mu3; 31.08.2016

Когда вы открываете InAppBrowser, ваше приложение и все его JS приостанавливаются, поэтому независимо от того, сколько сценариев вы пытаетесь добавить в свое приложение для управления IAB, все это не будет иметь значения, когда оно действительно откроется.

Однако если вы установите для параметра положение панели инструментов значение сверху, элементы управления браузера переместятся из нижней части экрана в верхнюю. Chrome браузера будет учитывать строку состояния, и когда вы прокручиваете контент вверх, он будет достаточно скрыт под элементами управления.

Это своего рода хакерское решение, но оно работает без интенсивного кодирования или переписывания плагина.

Как это сделать:

В файле config.xml убедитесь, что вы указываете подключаемый модуль InAppBrowser:

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

Затем, где бы вы ни открывали браузер:

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

Вы можете найти дополнительные настраиваемые параметры в InAppBrowser GitHub readme.

person Little Tiny Fish    schedule 02.07.2014
comment
Это не работает на ios, по-прежнему отображается строка состояния - person eyal_katz; 12.10.2016

Я использую cordova-plugin-inappbrowser, и у меня были точно такие же проблемы с панелью состояния в iOS. Я попробовал несколько предложений здесь, а также попытался вставить CSS(), чтобы настроить поле вверху, и ни одно из них не сработало. В конце концов, установка плагина org.apache.cordova.statusbar и простой вызов StatusBar.overlaysWebView(false); исправили проблему.

Подробнее о плагине строки состояния можно прочитать здесь . Решение предоставлено neilsteventon.

person alexkb    schedule 14.01.2015
comment
Где вы это называете? Похоже, это не влияет на IAB. - person mu3; 30.08.2016

Чтобы еще больше расширить @alexkb, решение состоит в том, чтобы подключиться к событию выхода InAppBrowser, чтобы после возврата на страницу строка состояния отображалась правильно.

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

Это устранило проблему скрытия и отображения строки состояния, когда браузер в приложении закрыт.

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