Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách xóa lịch sử WebView trong Android

Giới thiệu

Ví dụ này demo cách xóa lịch sử duyệt web (history) của WebView trong Android sử dụng phương thức clearHistory(), kèm theo cấu hình JavaScript, geolocation và hiển thị tiến độ tải.

Bước 1: Tạo dự án mới

Android Studio → File → New Project.

Bước 2: Giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <WebView
        android:id="@+id/web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

Bước 3: MainActivity.java

package com.example.myapplication;

import android.app.ProgressDialog;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
    private WebView webView;
    private ProgressDialog progressDialog;

    @RequiresApi(api = Build.VERSION_CODES.P)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Đang tải dữ liệu...");
        progressDialog.setCancelable(false);

        webView = findViewById(R.id.web_view);
        webView.requestFocus();

        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);           // Bật JavaScript
        settings.setDomStorageEnabled(true);           // Cho phép localStorage
        settings.setGeolocationEnabled(true);          // Cho phép định vị
        settings.setSupportZoom(true);                 // Hỗ trợ zoom
        settings.setBuiltInZoomControls(true);         // Điều khiển zoom tích hợp
        settings.setDisplayZoomControls(false);        // Ẩn nút zoom trên màn hình
        settings.setLoadWithOverviewMode(true);        // Fit màn hình
        settings.setUseWideViewPort(true);             // Wide viewport
        settings.setCacheMode(WebSettings.LOAD_DEFAULT); // Chế độ cache

        // QUAN TRỌNG: Xóa lịch sử duyệt web
        webView.clearHistory();
        webView.clearCache(true);  // Cũng xóa cache
        webView.clearFormData();   // Xóa dữ liệu form

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int progress) {
                if (progress < 100 && !progressDialog.isShowing()) {
                    progressDialog.show();
                }
                if (progress == 100 && progressDialog.isShowing()) {
                    progressDialog.dismiss();
                }
            }

            @Override
            public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                callback.invoke(origin, true, false); // Cho phép định vị
            }
        });

        webView.loadUrl("https://mylocation.org/");
    }

    @Override
    public void onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            super.onBackPressed();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (progressDialog != null && progressDialog.isShowing()) {
            progressDialog.dismiss();
        }
        webView.destroy(); // Giải phóng tài nguyên WebView
    }
}

Bước 4: AndroidManifest.xml - Quyền Internet

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Các phương thức xóa dữ liệu WebView

Lưu ý quan trọng

  • clearHistory() không xóa cookie, cache, hay form data.
  • Để xóa hoàn toàn: gọi cả 3 phương thức clearHistory(), clearCache(true), clearFormData().
  • Cookie quản lý riêng qua CookieManager.getInstance().removeAllCookies() (API 21+).
  • Luôn gọi webView.destroy() trong onDestroy() tránh memory leak.

Chạy ứng dụng

Cách xóa lịch sử WebView trong Android

WebView tải trang mylocation.org, hiển thị vị trí địa lý, không có lịch sử duyệt trước đó.

Phương thứcChức năng
clearHistory()Xóa lịch sử điều hướng (back/forward list)
clearCache(boolean includeDiskFiles)Xóa cache bộ nhớ và/hoặc disk
clearFormData()Xóa dữ liệu form đã lưu (autofill)
clearMatches()Xóa kết quả tìm kiếm highlight
clearSslPreferences()Xóa lựa chọn SSL (certificate)