У меня есть приложение CodeName One, в котором я использую BrowserComponent для загрузки HTML-страницы. Эта HTML-страница (HTMLPage1) дополнительно открывает другую HTML-страницу (HTMLPage2) одним нажатием кнопки, используя window.open()
. Это работает правильно в приложении. Этот HTMLPage2 имеет кнопку Закрыть, и при нажатии этой кнопки HTMLPage2 должен быть закрыт, а элемент управления должен вернуться к HTMLPage1. Тем не менее, это не работает, как ожидалось. При нажатии кнопки «Закрыть» в приложении ничего не происходит, а HTMLPage2 по-прежнему отображается в приложении. Я попытался использовать window.close () и self.close (), и ни один из них не работает.
Я нашел следующую статью о поиске
Android Webview: скрипты могут закрывать только те окна, которые были им открыты , что похоже на проблему, с которой я сталкиваюсь
Кроме того, у меня на мобильном телефоне есть приложение для тестирования WebView (его можно найти в PlayStore - поиск com.snc.test.WebView Test
), которое позволяет мне изменять настройки WebView и запускать различные URL-адреса. Я использовал это приложение, чтобы проверить, могу ли я успешно вызывать свои HTML-страницы через приложение WebView Test. С настройками по умолчанию я столкнулся с той же проблемой, что и описанная выше. Кнопка Закрыть не работает.
Однако затем я изменил свойство setSupportMultipleWindows()
в приложении и установил для него значение true. После этого он корректно работал через приложение WebView Test. При нажатии кнопки «Закрыть» в HTMLPage2 эта страница была закрыта, и я снова мог видеть HTMLPage1.
Итак, я попытался проверить, как установить это свойство в CodeName One. Я обнаружил, что BrowserComponent.setProperty("SupportMultipleWindows", "true")
должен быть в состоянии сделать то же самое. Когда я установил это свойство и протестировал приложение, оно все равно не работало.
Потом я просмотрел документацию
WebSettings.setSupportMultipleWindows
Согласно этой документации, если установлено значение true, хост-приложение должно реализовывать WebChromeClient.onCreateWindow(WebView, boolean, boolean, Message)
.
Я не смог найти способ сделать это через CodeName One.
Я иду по правильному пути, чтобы решить эту проблему? Если нет, то, пожалуйста, направь меня.