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

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

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

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

Solutions Collecting From Web of "Как я могу заставить кордону InAppBrowser предоставить пользователю возможность закрыть браузер при использовании Android-устройства?"

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

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

Для тех из нас, кто использует Ionic ( ionicframework.com ) и / или ngcordova ( 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 для управления «toolbar.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. Однако, если вы хотите получить кнопку «Готово» самостоятельно, без адресной строки, ее довольно легко сделать, сделав одно изменение исходным кодом кордовы.

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

Вот несколько пошаговых инструкций:

  1. Загрузите исходный код кордовы:

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

  2. Загрузите коллекцию кодеков lib здесь

  3. Открытые инструменты для разработчиков Android
  4. Импортируйте проект cordova в рабочее пространство

    File > Import... > Existing Projects into Workspace

  5. Создайте каталог libs и скопируйте в него загруженный файл commons-codec-1.7.jar .

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

Надеюсь, это поможет кому-то другому.

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

Во-первых, проект Cordova / Ionic был нарезан плагинами. Нам понадобится репо -коррекция cordova-plugAppBrowser .

ШАГ 1

Сначала мы должны клонировать его где-то локально или вилка на github / bitbucket. (Нам понадобится наше клонированное репо для каждой новой настройки проекта.) Мы можем легко клонировать репо с помощью этой команды:

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

ШАГ 2

Затем мы должны внести необходимые изменения в проект. Чтобы поведение url-бар на Android было таким же, как в iOS, мы должны всегда отображать меню и показывать строку url только в том случае, если пользователь запрашивает меню. Код, который контролирует это, находится в файле /src/android/InAppBrowser.java .

Мы должны изменить линии между 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, если из вашего репозитория каждый раз, когда вы настраиваете свой проект.

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

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

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

Это возможно путем настройки «InAppBrowser.java». Я знаю, что это немного странно, но это единственный выбор, который у меня был. Но те маленькие хитрости, которые я сделал для java-файла, теперь позволяют мне перемещаться по страницам в моем приложении.

Вот изменение, которое должно быть сделано в InAppBrowser.java. В методе «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; } } });