Вопрос

какая разница между setWebViewClient против. setWebChromeClient в андроиде?

Это было полезно?

Решение

Из исходный код:

// 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, Favicons, заголовки и прогресса. Взгляните этот пример: Добавление оповещения () поддержки веб-просмотру

На первый взгляд, слишком много различий Webviewclient. & WebchromeClient. Отказ Но в основном: если вы разрабатываете веб-просмотр, который не потребует слишком много функций, но рендеринг HTML, вы можете просто использовать WebViewClient. Отказ С другой стороны, если вы хотите (например)) загрузить Favicon страницы, вы рендерируете, вы должны использовать 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); 

И ваш веб-просмотр будет (теоретически) иметь все функции, реализованные (в качестве родного браузера Android).

Другие советы

Я чувствую, что этот вопрос нужно немного более подробно. Мой ответ вдохновлен от программирования Android, Руководство по ранчо Nerd (2-е издание).

По умолчанию, JavaScript выключен в WebView. Вам не всегда нужно его иметь, но для некоторых приложений может потребовать его.

Загрузка URL должна быть сделана после настройки веб-просмотра, поэтому вы выполняете это последнее. До этого вы включаете JavaScript, позвонив getSettings() получить экземпляр веб-сайтов и звонить WebSettings.setJavaScriptEnabled(true). Отказ Webettings - это первый из трех способов изменить ваш веб-просмотр. Он имеет различные свойства, которые вы можете установить, например, строка пользовательского агента и размер текста.

После этого вы настраиваете свой WebViewClient. WebViewClient - это интерфейс событий. Предоставляя собственную реализацию WebViewClient, вы можете ответить на рендеринг событий. Например, вы можете обнаружить, когда рендерер начинает загружать изображение из определенного URL или решить, следует ли повторно отправить запрос на почту на сервер.

Webviewclient. Есть много методов, которые вы можете переопределить, большинство из которых вы не будете иметь дело. Однако вам нужно заменить реализацию WebViewClient по умолчанию WebViewClient shouldOverrideUrlLoading(WebView, String). Отказ Этот метод определяет, что произойдет, когда новый URL загружен в веб-просмотре, как нажав ссылку. Если вы вернетесь True, вы говорите: «Не обрабатывайте этот URL, я еду это сам». Если вы вернете ложь, вы говорите: «Продолжай и загрузите этот URL, WebView, я ничего не делаю с этим».

Реализация по умолчанию выходит неявное намерение с URL, так же как вы делали ранее. Теперь, хотя это будет серьезная проблема. Первое, что несколько веб-приложений - это перенаправить вас на мобильную версию сайта. С помощью WebViewClient по умолчанию это означает, что вы немедленно отправляете в веб-браузер пользователя по умолчанию. Это только то, что вы пытаетесь избежать. Исправление просто - просто переопределите реализацию по умолчанию и верните false.

Используйте WebChromeClient, чтобы ели вещиПоскольку вы найдуте время, чтобы создать свой собственный веб-просмотр, давайте немного ель немного, добавив панель прогресса и обновляя субтитров панели инструментов с заголовком загруженной страницы.

Чтобы подключить ProgressBar, вы будете использовать второй обратный вызов на WebView: WebChromeClient.

WebViewClient - это интерфейс для реагирования на рендеринг событий; WebChromeClient - это интерфейс событий для реагирования на события, которые должны изменять элементы хрома вокруг браузера. Это включает в себя предупреждения о JavaScript, Favicons и обновления, конечно, для загрузки прогресса и заголовка текущей страницы.

Подключить это в onCreateView(…). Отказ Использование WebChromeClient для ели наличия обновлений прогресса и обновления заголовка каждый имеет свой собственный метод обратного вызова,onProgressChanged(WebView, int) а также onReceivedTitle(WebView, String). Отказ Прогресс, который вы получаете от onProgressChanged(WebView, int) это целое число от 0 до 100. Если это 100, вы знаете, что страница выполняется загрузка, поэтому вы скрываете ProgressBar, установив его видимость View.GONE.

Отказ от ответственности: Эта информация была взята из программирования Android: Big Nerd Ranch Guide с разрешения авторов. Для получения дополнительной информации об этой книге или купить копию, пожалуйста, посетите BignerDranch.com.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top