Не кликаемые ссылки в WebView - PullRequest
1 голос
/ 29 ноября 2011

В моем приложении я извлекаю некоторый HTML-код из веб-службы и отображаю его в WebView. Большую часть времени приложение будет отображать ссылки в HTML просто отлично, так как они нажимаются и открывают браузер Android. В других случаях, однако, ссылки не кликабельны. Оказывается, иногда служба будет предоставлять HTML ссылки, которые не находятся внутри href и представляют собой просто текст.

Есть ли в любом случае WebView для анализа HTML и сделать эти ссылки "кликабельными"? Я знаю, что браузер Android по умолчанию может это сделать, но я не уверен насчет WebViews.

1 Ответ

1 голос
/ 29 ноября 2011

В Webview могут отсутствовать встроенные детекторы для автоматической связи простых URL-адресов на странице, но вы можете запустить функцию JavaScript в WebView для анализа URL-адресов после завершения загрузки страницы.

По сути, что-то вроде следующего (я еще не проверял этот код на синтаксис, но он должен дать вам представление):

final WebView webview = (WebView)findViewById(R.id.browser);
/* JavaScript must be enabled if you want it to work, obviously */
webview.getSettings().setJavaScriptEnabled(true);

/* WebViewClient must be set BEFORE calling loadUrl! */
webview.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url)
    {
        webview.loadUrl("javascript:(function() { " +
                "var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; " +
                "document.getElementsByTagName('body')[0].innerHTML =  document.getElementsByTagName('body')[0].innerHTML.replace(exp,'<a href='$1'>$1</a>');" +
                "})()");
    }
});

webview.loadUrl("http://code.google.com/android");

Обратите внимание, что приведенный выше JavaScript заимствует регулярное выражение JavaScript для анализа URL из " Как заменить обычные URL ссылками? ", и дополнительную информацию можно найти по внедрению JavaScript в ссылке на Android WebViewClient и на 1008 *http://lexandera.com/2009/01/injecting-javascript-into-a-webview/ (не я).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...