Работа с сетью. WebView

WebView

Последнее обновление: 17.10.2021

WebView представляет простейший элемент для рендеринга html-кода, базирующийся на движке WebKit. Благодаря этому мы можем использовать WebView как примитивный веб-браузер, просматривая через него контент из сети интернет. Использование движка WebKit гарантирует, что отображение контента будет происходить примерно такжe, как и в других браузерах, построенных на этом движке - Google Chrome и Safari.

Некоторые основные методы класса WebView:

  • boolean canGoBack(): возвращает true, если перед текущей веб-страницей в истории навигации WebView еще есть страницы

  • boolean canGoForward(): возвращает true, если после текущей веб-страницей в истории навигации WebView еще есть страницы

  • void clearCache(boolean includeDiskFiles): очищает кэш WebView

  • void clearFormData(): очищает данный автозаполнения полей форм

  • void clearHistory(): очищает историю навигации WebView

  • String getUrl(): возвращает адрес текущей веб-страницы

  • void goBack(): переходит к предыдущей веб-странице в истории навигации

  • void goForward(): переходит к следующей веб-странице в истории навигации

  • void loadData(String data, String mimeType, String encoding): загружает в веб-браузере данные в виде html-кода, используя указанный mime-тип и кодировку

  • void loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl): также загружает в веб-браузере данные в виде html-кода, используя указанный mime-тип и кодировку, как и метод loadData(). Однако кроме того, в качестве первого параметра принимает валидный адрес, с которым ассоциируется загруженные данные.

    Зачем нужен этот метод, если есть loadData()? Содержимое, загружаемое методом loadData(), в качестве значения для window.origin будет иметь значение null, и таким образом, источник загружаемого содержимого не сможет пройти проверку на достоверность. Метод loadDataWithBaseURL() с валидными адресами (протокол может быть и HTTP, и HTTPS) позволяет установить источник содержимого.

  • void loadUrl(String url): загружает веб-страницу по определенному адресу

  • void postUrl(String url, byte[] postData): отправляет данные с помощью запроса типа "POST" по определенному адресу

  • void zoomBy(float zoomFactor): изменяет масштаб на опредленный коэффициент

  • boolean zoomIn(): увеличивает масштаб

  • boolean zoomOut(): уменьшает масштаб

Работать с WebView очень просто. Определим данный элемент в разметке layout:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/webBrowser"
        android:layout_width="0dp"
        android:layout_height="0dp"

        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Для получения доступа к интернету из приложения, необходимо указать в файле манифеста AndroidManifest.xml соответствующее разрешение:

<uses-permission android:name="android.permission.INTERNET"/>

Чтобы загрузить определенную страницу в WebView, через метод loadUrl() надо установить ее адрес:

package com.example.viewapp;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView browser=findViewById(R.id.webBrowser);
        browser.loadUrl("https://metanit.com");
    }
}
Элемент WebView в Android и Java

Вместо определения элемента в layout мы можем создать WebView в коде Activity:

WebView browser = new WebView(this);
setContentView(browser);
browser.loadUrl("http://metanit.com");

Кроме загрузки конкретной страницы из интернета с помощью метод loadData():

WebView browser= findViewById(R.id.webBrowser);
browser.loadData("<html><body><h2>Hello, Android!</h2></body></html>", "text/html", "UTF-8");

Первым параметром метод принимает строку кода html, во втором - тип содержимого, а в третьем - кодировку.

Load data in WebView в Android и Java

JavaScript

По умолчанию в WebView отключен javascript, чтобы его включить надо применить метод setJavaScriptEnabled(true) объекта WebSettings:

import android.webkit.WebSettings;
//.....................................
WebView browser = findViewById(R.id.webBrowser);
WebSettings webSettings = browser.getSettings();
webSettings.setJavaScriptEnabled(true);
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850