Есть ли способ получить URL-адреса и номера телефонов автоматической ссылки WebView в Android?

Если на странице есть URL-адрес или номер телефона, который не является ссылкой, есть ли способ получить WebView распознает его и автоматически превращает в ссылку, как это можно сделать с помощью TextView?

С TextView вы просто установите android:autoLink на желаемые настройки:

<TextView
    android:autoLink="web|phone"
    ... />

но я не могу найти эквивалент для WebView.


person Jeremy Logan    schedule 16.11.2009    source источник


Ответы (2)


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

yourWebView.loadUrl("javascript:(function(){ /* code that creates links */ })()");

Это добавит javaScript в уже загруженную веб-страницу. Здесь доступен более длинный пример: http://lexandera.com/2009/01/injecting-javascript-into-a-webview/.

Вы можете найти исходный код JavaScript для создания ссылок, если посмотрите исходный код скрипта Linkify для Greasemonkey (это плагин для Firefox, если вы с ним не знакомы). Я считаю, что это идет с установкой по умолчанию.

person Aleksander Kmetec    schedule 16.11.2009
comment
Ха ... это именно тот маршрут, который я планировал (включая использование Linkify в качестве примера), если бы не было встроенного способа сделать это. Спасибо! - person Jeremy Logan; 16.11.2009
comment
Разве в браузере нет автоматического определения телефонных номеров и адресов? Должен быть более простой способ. Я просто этого не знаю. - person Eric Mill; 17.11.2009
comment
Да, у него есть какое-то обнаружение адреса (и, возможно, номера телефона). Но, судя по моему опыту, он не очень надежен (в прошлый раз, когда я тестировал его, он распознавал только адреса США), и он также не выделяет то, что обнаруживает. - person Aleksander Kmetec; 17.11.2009
comment
Скрипт Linkify Greasemonkey не заработал, потому что (очевидно) WebView не имеет XPath. В итоге я откопал букмарклет, который использовал DOM, и (после модификации) он работал нормально. - person Jeremy Logan; 17.11.2009

Если вы загружаете свой собственный (веб-контент) из строки, вы можете сделать что-то вроде этого:

final String content = "My email is: [email protected] ...";
Spannable sp = new SpannableString(content);
Linkify.addLinks(sp, Linkify.ALL);
final String html = "<body>" + Html.toHtml(sp) + "</body>";
myWebView.loadData(html, "text/html", "utf-8");
person Harri    schedule 02.03.2011
comment
Обратите внимание: если строка содержимого уже содержит HTML, вам следует использовать Spannable sp = new SpannableString( Html.fromHtml(content) ), чтобы ваши символы не были преобразованы в сущности в Html.toHtml(sp). - person azdev; 16.08.2012
comment
это работает для версии Lollipop? Я запускаю свое приложение как на Lollipop, так и на Kitkat, но возникают проблемы на устройстве Lollipop? - person Prashanth Debbadwar; 27.07.2015
comment
Это работает, но проблема с форматированием. Если в контенте есть теги, которые не поддерживаются (например, ‹li›) веб-просмотром. - person Hiren Dabhi; 20.10.2016