Ответы:
Из исходного кода :
// Instance of WebViewClient that is the client callback.
private volatile WebViewClient mWebViewClient;
// Instance of WebChromeClient for handling all chrome functions.
private volatile WebChromeClient mWebChromeClient;
// SOME OTHER SUTFFF.......
/**
* Set the WebViewClient.
* @param client An implementation of WebViewClient.
*/
public void setWebViewClient(WebViewClient client) {
mWebViewClient = client;
}
/**
* Set the WebChromeClient.
* @param client An implementation of WebChromeClient.
*/
public void setWebChromeClient(WebChromeClient client) {
mWebChromeClient = client;
}
Использование WebChromeClient позволяет обрабатывать диалоги Javascript, значки избранного, заголовки и прогресс. Взгляните на этот пример: добавление поддержки alert () в WebView
На первый взгляд, слишком много различий между WebViewClient и WebChromeClient . Но, в основном: если вы разрабатываете WebView, который не требует слишком много функций, но отображает HTML, вы можете просто использовать WebViewClient
. С другой стороны, если вы хотите (например) загрузить значок страницы, которую вы отображаете, вы должны использовать WebChromeClient
объект и переопределить onReceivedIcon(WebView view, Bitmap icon)
.
В большинстве случаев, если вы не хотите беспокоиться об этих вещах ... вы можете просто сделать это:
webView= (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
И ваш WebView (в теории) будет иметь все реализованные функции (как родной браузер Android).
Я чувствую, что этот вопрос требует немного больше деталей. Мой ответ основан на Android-программировании, The Nerd Ranch Guide (2-е издание).
По умолчанию JavaScript отключен в WebView. Вам не всегда нужно включать его, но для некоторых приложений это может потребоваться.
Загрузка URL должна быть выполнена после настройки WebView, так что вы делаете это в последнюю очередь. Перед этим вы включаете JavaScript, вызывая его getSettings()
для получения экземпляра WebSettings и вызова WebSettings.setJavaScriptEnabled(true)
. WebSettings - это первый из трех способов изменения вашего WebView. Он имеет различные свойства, которые вы можете установить, например, строку агента пользователя и размер текста.
После этого вы настраиваете свой WebViewClient. WebViewClient - это интерфейс событий. Предоставляя собственную реализацию WebViewClient, вы можете реагировать на события рендеринга. Например, вы можете определить, когда средство визуализации начинает загружать изображение с определенного URL-адреса, или решить, следует ли повторно отправить запрос POST на сервер.
В WebViewClient есть много методов, которые вы можете переопределить, большинство из которых вам не нужны . Однако вам необходимо заменить реализацию WebViewClient по умолчанию shouldOverrideUrlLoading(WebView, String)
. Этот метод определяет, что произойдет, когда новый URL-адрес будет загружен в WebView, например, нажав ссылку. Если вы возвращаете true, вы говорите: «Не обрабатывайте этот URL, я обрабатываю его сам». Если вы возвращаете false, вы говорите: «Идите и загрузите этот URL, WebView, я ничего с этим не делаю».
Реализация по умолчанию запускает неявное намерение с URL, как вы делали ранее. Теперь, однако, это будет серьезной проблемой. В первую очередь некоторые веб-приложения перенаправляют вас на мобильную версию веб-сайта. При использовании WebViewClient по умолчанию это означает, что вы немедленно отправляетесь в веб-браузер пользователя по умолчанию. Это именно то, чего вы пытаетесь избежать. Исправить это просто - просто переопределить реализацию по умолчанию и вернуть false.
Используйте WebChromeClient, чтобы привести вещи в порядок Поскольку вы тратите время на создание своего собственного WebView, давайте немного украсим его, добавив индикатор выполнения и обновив подзаголовок панели инструментов заголовком загруженной страницы.
Для подключения к ProgressBar, вы будете использовать второй обратный вызов на WebView: WebChromeClient
.
WebViewClient - это интерфейс для ответа на события рендеринга; WebChromeClient - это интерфейс событий для реагирования на события, которые должны изменить элементы chrome вокруг браузера. Это включает в себя предупреждения JavaScript, значки избранного и, конечно же, обновления для прогресса загрузки и заголовка текущей страницы.
Поднимите это onCreateView(…)
. Использование WebChromeClient для улучшения ситуации У каждого обновления Progress и заголовка есть свой метод обратного вызова,
onProgressChanged(WebView, int)
и onReceivedTitle(WebView, String)
. Прогресс, от onProgressChanged(WebView, int)
которого вы получаете, представляет собой целое число от 0 до 100. Если оно равно 100, вы знаете, что страница загружена, поэтому вы скрываете ProgressBar, устанавливая его видимость на View.GONE
.
Отказ от ответственности: эта информация была взята из Android Programming: The Big Nerd Guide с разрешения авторов. Для получения дополнительной информации об этой книге или для покупки копии, пожалуйста, посетите bignerdranch.com.