Я реализовал пользовательский WebView
с включенным setSupportMultipleWindows()
. Таким образом, у меня также есть пользовательский WebChromeClient
, который переопределяет onCreateWindow()
В большинстве случаев я использовал следующий фрагмент для получения URL-адреса страницы в новом окне (т. Е. Через target:_blank
):
Message href = view.getHandler().obtainMessage();
view.requestFocusNodeHref(href);
String url = href.getData().getString("url");
Есть пустые проверки на месте, но для простоты я удалил их в приведенном выше фрагменте. Теперь проблема в том, что иногда данные Bundle
(возвращаемые через getData()
) имеют нулевой URL для относительных ссылок (т.е. href="/somepage"
вместо href="https://www.example.com/somepage/"
).
Итак, я искал на SO и нашел другое возможное решение:
WebView.HitTestResult result = view.getHitTestResult();
String url = result.getExtra();
Однако это также возвращает ноль. Если я получаю тип данных, используя result.getType()
, он возвращает 0, что соответствует UNKNOWN_TYPE
.`
Я не уверен, почему он возвращает null для вышеупомянутых методов.
Нотабене что если я отключу поддержку нескольких окон, те же ссылки будут работать нормально. Отключение такой поддержки, однако, не вариант. Есть ли другой способ получить URL из onCreateWindow()
?