Как я могу получить cordova InAppBrowser, чтобы предоставить пользователю возможность закрыть браузер при использовании устройства Android?

Я использую cordova InAppBrowser для отображения контента с внешнего сайта в моем приложении. Когда я открываю браузер на iPhone, в нижней части InAppBrowser есть несколько кнопок для его закрытия или навигации взад и вперед. InAppBrowser на устройстве Android не имеет таких кнопок и не имеет очевидного способа для пользователя закрыть браузер.

Я знаю, как программно закрыть InAppBrowser, но как может пользователей закройте его при использовании Android устройство?

Я знаю, что пользователь может нажать кнопку "назад", чтобы закрыть браузер, но (1) это не интуитивно - кнопка "Назад" обычно означает "вернуться на страницу", и (2) я бы в конечном итоге хотел изменить поведение кнопки "назад", чтобы вернуться на страницу на сайте, который отображается внутри InAppBrowser, а не закрыть браузер.

8 ответов


добавлять "location=yes" до конца вашего звонка разместит адресную строку и кнопку Готово в верхней части окна на Android. (Она появляется в нижней части окна в iOS). Нажав кнопку "Готово" закрывает окно.

var ref = window.open('http://apache.org', '_blank', 'location=yes');

для тех из нас, кто использует Ionic (ionicframework.com) и / или нгкордова (ngcordova.com). Следующий код запустит inappbrowser, а затем закроет диалоговое окно по ссылке <a href="/mobile/close">close</a>.

  $cordovaInAppBrowser.open('http://localhost:3000/#/mypath/', '_blank', options).then((event) ->
    # success
    return
    ).catch (event) ->
      # error
      return

  $rootScope.$on '$cordovaInAppBrowser:loadstart', (e, event) ->
    $log.log 'loadstart', e, event
    if event.url.match('mobile/close')
      $cordovaInAppBrowser.close()

чтобы сохранить опцию "location=yes", чтобы вести себя одинаково на Android и iOS, я бы предложил изменить исправление Троя следующим изменением, которое перемещает оператор if для управления "панелью инструментов.addView (edittext);" и не вся панель инструментов.

// Add the views to our toolbar
toolbar.addView(actionButtonContainer);
if (getShowLocationBar()) {
    toolbar.addView(edittext);
}
toolbar.addView(close);

// Add our toolbar to our main view/layout
main.addView(toolbar);

по сравнению с оригинальным кодом:

// Add the views to our toolbar
toolbar.addView(actionButtonContainer);
toolbar.addView(edittext);
toolbar.addView(close);

// Don't add the toolbar if its been disabled
if (getShowLocationBar()) {
    // Add our toolbar to our main view/layout
    main.addView(toolbar);
}

как указано elMarquis, вам нужно добавить "location=yes", чтобы получить кнопку" Готово " на устройстве Android. Однако, если вы хотите получить кнопку Готово самостоятельно, без адресной строки, это довольно легко сделать, сделав одно изменение исходного кода cordova.

я получил информацию от этой группы google:https://groups.google.com/forum/?fromgroups=#!тема / phonegap/mUcBcjPISgg

вот некоторые шаг за шагом инструкции:

  1. загрузить исходный код cordova:

    git clone https://github.com/apache/cordova-plugin-inappbrowser

  2. загрузите кодек общего пользования lib из здесь

  3. Откройте Android Developer Tools
  4. импортируйте проект cordova в рабочее пространство

    File > Import... > Existing Projects into Workspace

  5. создать libs каталог и скопируйте загруженный в он.

  6. добавить gen папка для проекта (требуется .файл classpath, но не включен в загрузку git, так как git не разрешает пустые папки)
  7. перейти к проекту > построить все. Проект должен строиться без ошибок.
  8. Открыть InAppBrowser.java и поиск " панели инструментов.addView (edittext);" (строка 468 в версии cordova, которую я загрузил).
  9. закомментировать эту строку.
  10. построить проект снова.
  11. скопируйте bin / cordova.jar-файл в любом проекте, в котором вы используете cordova.

надеюсь, это поможет кому-то еще.


для тех, кто ищет родную кнопку "Готово" в нижнем колонтитуле для Android (аналогично iOS), я реализовал такую функцию на эта вилка of cordova-plugin-inappbrowser.

Обновление: Январь 2018

мой pull-запрос был объединен в официальный плагин repo, таким образом, вы можете дождаться следующего выпуска (который будет >=2.0.2) или установить прямо из Github, например:

cordova plugin add https://github.com/apache/cordova-plugin-inappbrowser

Оригинал ответ

реализация является продолжением PR #246, которые в настоящее время (4 декабря 2017) в ожидании утверждения для слияния. Как только это будет сделано, я открою отдельную проблему и PR, чтобы объединить это обратно в master cordova-plugin-inappbrowser.

вот несколько скриншотов с соответствующими


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

во-первых, проект Cordova / Ionic был разрезан на Плагины. Что нам понадобится, так это cordova-plugin-inAppBrowser РЕПО.

Шаг 1

Сначала мы должны клонировать его где-то локально или развить его на GitHub/bitbucket. (Нам понадобится наше клонированное РЕПО постоянно для каждой новой настройки проекта.) Мы можем легко клонировать РЕПО с этой командой:

git clone git@github.com:apache/cordova-plugin-inappbrowser.git

Шаг 2

затем мы должны внести требуемые изменения в проект. Чтобы сделать поведение строки url на Android к тому же как в iOS мы должны всегда показывать панель меню и показывать строку url, только если пользователь запрашивает панель меню. Код, который управляет этим, находится в .

мы должны изменить линии между 707-716. (Примечание: эти строки числа могут изменяться, если они изменяют файл.)

мы должны изменить код от этого

// Add the views to our toolbar
toolbar.addView(actionButtonContainer);
toolbar.addView(edittext);
toolbar.addView(close);

// Don't add the toolbar if its been disabled
if (getShowLocationBar()) {
    // Add our toolbar to our main view/layout
    main.addView(toolbar);
}

для этого:

// Add the views to our toolbar
toolbar.addView(actionButtonContainer);
if (getShowLocationBar()) {
    toolbar.addView(edittext);
}
toolbar.addView(close);

main.addView(toolbar);

Итак, что мы сделали здесь, это то, что мы добавляем панели инструментов всегда с кнопками exit/forward/back и добавляем строку url, только если пользователь хочет полную панель. Это поведение версии iOS.

кроме того, если мы хотим убрать кнопки вперед/назад, потому что Android имеет родную кнопку назад, тогда мы имеем чтобы прокомментировать их и добавить их, только если использование хочет полную строку меню. Поэтому наш код должен выглядеть так:

// actionButtonContainer.addView(back);
// actionButtonContainer.addView(forward);

// Add the views to our toolbar
toolbar.addView(actionButtonContainer);
if (getShowLocationBar()) {
    toolbar.addView(edittext);
    // We add this here if the user want the full bar, then we need this buttons.
    actionButtonContainer.addView(back);
    actionButtonContainer.addView(forward);
}
toolbar.addView(close);

Шаг 3

мы должны добавить измененный плагин к нашему проекту, если вы хотите это только один раз, то просто запустите

cordova plugin add https://github.com/username/cordova-plugin-inappbrowser.git
// or
cordova plugin add https://UserName@bitbucket.org/UserName/cordova-plugin-inappbrowser.git

вместо

cordova plugin add cordova-plugin-inappbrowser 

Примечание: Вы должны сохранить измененное РЕПО, потому что cordova plugin add команда fetch if из вашего репозитория каждый раз, когда вы настраиваете свой проект.


просто наткнулся на решение, которое может помочь лучше удовлетворить ваши потребности и/или помочь другим людям.

В общем, вы можете создать "фиктивную" HTML-страницу, Добавить JavaScript в свое приложение, чтобы определить, когда эта страница загружена, и когда она загружена, закройте InAppBrowser.

смотрите здесь: Phonegap build-открыть внешнюю страницу в InAppBrowser или childbrowser без панели инструментов и закрыть ее?


это возможно путем настройки " InAppBrowser.java'. Я знаю, это немного странно, но это единственный выбор, который у меня был. Но эти небольшие настройки, которые я сделал в файле java, теперь позволяют мне перемещаться по страницам в моем приложении.

вот это перемены в inappbrowser в.Ява, В методе " run " в методе showWebPage будет код прослушивателя что-то вроде этого,

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    public void onDismiss(DialogInterface dialog) {     
                        closeDialog();
                    }
});

под этой строкой добавьте код ниже,

dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {                   
@Override
     public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
         if (event.getAction()!=KeyEvent.ACTION_DOWN)
             return true;               
         if(keyCode==KeyEvent.KEYCODE_BACK){
             goBack();
             return true;
         }else {
             return false;
          }
      }
});