Обращайтесь с Android Back Button на Phonegap InAppBrowser

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

EDIT: Глядя на ответ на @T_D ниже, предоставленные решения являются самыми близкими, к которым я мог бы добраться. Невозможно переопределить кнопку в InAppBrowser, так как все настройки PhoneGap перестают работать при навигации по страницам на этом плагине. Я не смог найти какое-либо другое решение, а не модифицировать библиотеку API. Если здесь есть какие-либо парни из PhoneGap и знаю что-то еще, я буду рад получить некоторые комментарии. Благодарю.

Ближайший я получил:

var ref = window.open('http://apache.org', '_blank', 'location=yes'); ref.addEventListener("backbutton", function () { }) 

Solutions Collecting From Web of "Обращайтесь с Android Back Button на Phonegap InAppBrowser"

Согласно документации, для кнопки InAppBrowser теперь можно настроить поведение кнопки возврата оборудования:

Hardwareback: установите «да», чтобы использовать кнопку «Назад» для перехода назад в историю InAppBrowser. Если предыдущей страницы нет, InAppBrowser закроется. Значение по умолчанию – да, поэтому вы должны установить его на нет, если вы хотите, чтобы кнопка «Назад» просто закрыла InAppBrowser.

Благодаря Крису Эриксону .

Поэтому просто обновите плагин InAppBrowser, если обратная навигация – это желаемое поведение.

Для получения дополнительной информации см. https://github.com/apache/cordova-plugin-inappbrowser/pull/86

Это работало для меня в PhoneGap 2.7, помощь пришла отсюда: Как отключить кнопку Android Back на одной странице и перейти на кнопку выхода на каждой другой странице

 document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { document.addEventListener("backbutton", function (e) { e.preventDefault(); }, false ); } 

Вы можете сделать это довольно легко сейчас (с версии InAppBrowser версии 0.3.3), но вам придется редактировать файлы Java. Перейдите в каталог src / com / org / apache / corodova / inappbrowser и отредактируйте InAppBrowserDialog.java:

+ Изменить

  public void onBackPressed () { if (this.inAppBrowser == null) { this.dismiss(); } else { // better to go through the in inAppBrowser // because it does a clean up this.inAppBrowser.closeDialog(); } } 

в

 public void onBackPressed () { if (this.inAppBrowser == null) { this.dismiss(); } else { if (this.inAppBrowser.canGoBack()) { this.inAppBrowser.goBack(); } else { this.inAppBrowser.closeDialog(); } } } 

Затем перейдите в InAppBrowser и найдите функцию goBack, измените:

 /** * Checks to see if it is possible to go back one page in history, then does so. */ private void goBack() { if (this.inAppWebView.canGoBack()) { this.inAppWebView.goBack(); } } 

в

 /** * Checks to see if it is possible to go back one page in history, then does so. */ public void goBack() { if (this.inAppWebView.canGoBack()) { this.inAppWebView.goBack(); } } public boolean canGoBack() { return this.inAppWebView.canGoBack(); } 

И теперь кнопка возврата аппаратного обеспечения вернется, пока больше не потребуется делать обратную связь. Я действительно думаю, что это должно быть поведение по умолчанию в Android, так как кнопка «Готово» уже закрывает окно InAppBrowser.

EDIT ПРИМЕЧАНИЕ. Насколько мне известно, переопределить обратную кнопку для InAppBrowser в PhoneGap нельзя. Но я сделал все возможное, чтобы найти возможные решения …

В PhoneGap есть функция eventListener, которая отменяет обратную связь – не работает для InAppBrowser

 function onDeviceReady(){ document.addEventListener("backbutton", onBackKeyDown, false); } 

Альтернативный eventListener для отмены обратной кнопки – OP сказал, что это тоже не сработало

 var ref = window.open('http://www.stackoverflow.com', '_blank', 'location=yes'); ref.addEventListener("backbutton", function () { //logic here }) 

Переопределение Back-Button в Activity – это простая java, очевидно, не работающая в PhoneGap

 @Override public void onBackPressed() { //logic here } 

Вывод :

Выше решения не работали, по ссылкам ( этот ответ , этот и третий ) тоже не помогли. Таким образом, очень возможно, что переопределение обратной кнопки для InAppBrowser в PhoneGap невозможно. Если кто-то придумает решение или если что-то изменилось для новой версии PhoneGap, сообщите нам об этом …

РЕДАКТИРОВАТЬ:

Установка этого плагина может привести к ближайшему решению:

 cordova plugin add org.apache.cordova.inappbrowse 

Что этот плагин будет делать, в WP8 он будет накладывать кнопку Back / Forward / Close на InAppBrowser всякий раз, когда вы открываете в нем какую-либо ссылку / страницу.

Смотреть это изображение: Введите описание изображения здесь

Используйте jQuery mobile:

 $(document).on('backbutton', function(e){ e.preventDefault(); // YOUR CODE GOES HERE }); 

У меня была такая же проблема и, наконец, я получил ее на работу, я отправлю ответ здесь, если это поможет кому-то.

Это код, который я использую:

 window.new_window = window.open(url, '_blank', 'location=no'); window.new_window.addEventListener("exit", function () { window.new_window.close(); }); 

Таким образом, ключ в основном состоит в том, чтобы присоединить событие exit , которое вызывается при нажатии кнопки «Назад» устройства.

Кстати, я использовал cordova.js и локально cordova.js свои приложения с помощью CLI Cordova , я не знаю, имеет ли это какое-либо значение, я упоминаю это на всякий случай.

Запуск Кордовы 5.1.1 и когда я загружаю страницы в inappbroswer, мне нравится, когда работает кнопка «Назад», до тех пор, пока inappbrowser не вернется на мою страницу index.html, потому что она пустая и просто сидит там. Поэтому я использовал следующий код, чтобы исправить это. Он выходит из приложения, когда он выходит из inappbrowser.

 window.open = cordova.InAppBrowser.open; var ref = window.open(url, '_blank', 'location=no'); ref.addEventListener('exit', function () { navigator.app.exitApp(); }); 

Насколько я знаю, невозможно переопределить или обнаружить кнопку возврата из inAppBrowser. Когда вы нажмете кнопку «Назад», inAppBrowser скроет и вернет управление на страницу Phonegap. Вы можете поймать это с помощью focus события в окне (используя jQuery), например

 var browser = window.open('http://example.com', '_blank', 'location=no'); $(window).on('focus', function() { browser.show(); }); 

Для повторного открытия браузера. Затем вы можете использовать browser.executeScript() чтобы сигнализировать веб-загрузку, загруженную в браузере, если хотите.

Вдохновленный этим форумом .

Я знаю, что у этого вопроса уже есть ответ, но я отправляю свой ответ тем, кто не ответил на эти ответы (например, я):

Поэтому у меня есть многостраничное приложение для Android и IOS, и я использую cordova 5.x, и я добавил код ниже на каждой странице, кроме страницы, в которой мне нужен InAppBrowser:

 delete window.open; 

А затем для остальных страниц, которые я использовал:

 document.addEventListener("backbutton", onBackKeyDown, false); function onBackKeyDown(event) { // your code for handling back button comes here } 

Для обратной кнопки

Обратите внимание, что: delete window.open; База документации

Вручную восстановить поведение по умолчанию 'window.open'

После этого плагин InAppBrowser работал отлично, и я правильно обратился к кнопке на всех страницах.

Последнее не забывайте добавлять: <script type="text/javascript" charset="utf-8" src="cordova.js"></script> на страницах, которые должны иметь InAppBrowser.

Надеюсь эта помощь.