Відповіді:
Із вихідного коду :
// 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, фавікони, заголовки та прогрес. Погляньте на цей приклад: Додавання підтримки () попередження () до веб-перегляду
На перший погляд, занадто багато відмінностей 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 програмування, керівництвом Nerd Ranch (2-е видання).
За замовчуванням JavaScript у веб-перегляді вимкнено. Не завжди потрібно його вмикати, але для деяких додатків це може знадобитися.
Завантаження URL-адреси потрібно здійснити після налаштування веб-перегляду, тому ви зробите це останньою. Перед цим увімкніть JavaScript, зателефонувавши, getSettings()
щоб отримати екземпляр WebSettings та зателефонувавшиWebSettings.setJavaScriptEnabled(true)
. WebSettings - це перший із трьох способів змінити ваш WebView. Він має різні властивості, які ви можете встановити, наприклад, рядок і розмір тексту агента користувача.
Після цього ви налаштовуєте свій WebViewClient. WebViewClient - це інтерфейс події. Забезпечивши власну реалізацію WebViewClient, ви можете реагувати на події візуалізації. Наприклад, ви могли виявити, коли рендерінг починає завантажувати зображення з певної URL-адреси або вирішити, чи надсилати повторно запит POST на сервер.
WebViewClient має багато методів, якими ви можете перекрити, більшість з яких ви не будете мати справу. Однак вам потрібно замінити реалізацію за замовчуванням WebViewClientshouldOverrideUrlLoading(WebView, String)
. Цей метод визначає, що станеться, коли у веб-перегляд буде завантажена нова URL-адреса, наприклад, натиснувши посилання. Якщо ви повернете правду, ви говорите: "Не обробляйте цю URL-адресу, я сама обробляю її". Якщо ви повернете помилкове значення, ви говорите: "Вперед та завантажуйте цю URL-адресу, WebView, я з цим нічого не роблю".
Реалізація за замовчуванням запускає неявний намір з URL, як і раніше. Однак, це була б серйозна проблема. Перше, що деякі веб-програми роблять, це перенаправити вас на мобільну версію веб-сайту. З веб-переглядачем за замовчуванням WebViewClient означає, що вас негайно відправляють у веб-браузер за замовчуванням користувача. Це саме те, чого ви намагаєтеся уникати. Виправлення просте - просто скасуйте реалізацію за замовчуванням і поверніть хибну.
Використовуйте WebChromeClient для оброблення речей. Оскільки ви витрачаєте час на створення власного веб-перегляду, давайте трохи проробити його, додавши панель прогресу та оновивши підзаголовки панелі інструментів заголовком завантаженої сторінки.
Для підключення до ProgressBar, ви будете використовувати другий зворотний виклик на WebView: WebChromeClient
.
WebViewClient - це інтерфейс для реагування на події візуалізації; WebChromeClient - це інтерфейс подій для реагування на події, які мають змінювати елементи хрому навколо браузера. Сюди входять JavaScript-сповіщення, фаворити та звичайно оновлення для прогресу завантаження та назви поточної сторінки.
Зачепи його onCreateView(…)
. Використання WebChromeClient для виправдання речей оновлень Progress та оновлень заголовків має свій власний метод зворотного виклику
onProgressChanged(WebView, int)
та onReceivedTitle(WebView, String)
. Прогрес, який ви отримуєте, onProgressChanged(WebView, int)
- це ціле число від 0 до 100. Якщо це 100, ви знаєте, що сторінка виконується завантаженням, тому ви ховаєте програму ProgressBar, встановлюючи її видимість на View.GONE
.
Відмова від відповідальності: Ця інформація була взята з програмування Android: Посібник з ранчо великих рангів з дозволу авторів. Для отримання додаткової інформації про цю книгу або для придбання примірника, відвідайте сторінку bignerdranch.com.