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
| Phương thức | Chứ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) |
