WebView là một phần không thể thiếu của các ứng dụng, nó cho phép hiển thị các trang web trên màn hình giao diện người dùng. Dưới đây là 5 điều mà khi bạn mới tiếp cận đến WebView thì có thể chưa biết đến.
1. Intercepting URLs
Bằng cách implement phương thức shouldOverrideUrlLoading
trong quá trình khởi tạo WebViewClient,
ta có thể bắt chặn URL quá trình trang web điều hướng.
Bằng cách này, ta có thể kiểm soát xem URL đó có nên được tải hoặc mở một activity
/ service
nhất định bằng cách sử dụng Intent
hay không.
2. Basic Web Authentication
Nhiều trang web sẽ yêu cầu người dùng nhập thông tin đăng nhập của họ. Khi ta setup WebView
lần đầu tiên, ta có thể bỏ lỡ điều này và dẫn đến lỗi xác thực 401 khi tải trang.
Bằng cách implement phương thức onReceivedHttpAuthRequest
, ta có thể thực hiện dễ dàng basic authentication trong WebView
:
override fun onReceivedHttpAuthRequest( view: WebView, handler: HttpAuthHandler, host: String, realm: String) { handler.proceed("username", "password")
}
3. Setting Listeners cho Buttons và EditText của WebView
Khi ta muốn lấy dữ liệu từ các form của WebView
, hoặc thực hiện một action khi một button bên trong WebView
được click, ta có thể tận dụng đến khả năng tương tác Android-JavaScript.
Nếu ta biết ID của view/widget trong HTML, thì việc thực hiện các action trên Android dựa trên các tương tác WebView
là khá đơn giản.
Chỉ cần sử dụng phương thức evaluateJavaScript
và truyền mã JS dưới dạng một string. Tốt nhất thì nó nên được thực hiện trong phương thức onPageLoadFinishing
Đoạn code trên mới chỉ là để lấy dữ liệu từ các form WebView
khi nút được Click và chuyển chúng đến phương thức Android.onWebBtnClick
. Để nó hoạt động được, ta cần tạo một lớp JavaScript interface và thiết lập nó trên WebView
class WebAppInterface { Context mContext; WebAppInterface(Context c) { mContext = c; } @JavascriptInterface public void onWebBtnClick(String username, String password) { //handle the data captured from webview }
}
Ta thiết lập trên WebView như sau:
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
4. Trigger JavaScript Alert Prompts từ Android
Theo mặc định, prompts từ JavaScript không hiển thị nguyên bản trong Android. Vì vậy, ta cần ghi đè các phương thức onJsAlert
, onJsPrompt
và onJsConfirm
trong WebChromeClient
interface để hiển thị alert ()
của JavaScript và các phương thức khác.
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new MyWebChromeClient());
Bằng cách implement phương thức dưới đây bạn có thể show alert của Android:
final class MyWebChromeClient extends WebChromeClient { @Override public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { //implement AlertDialog here return true; }
}
5. Hiển thị Android File Chooser từ WebView
Ta cần implement phương thức onShowFileChooser
trong WebChromeClient
, trong đó ta phải thiết lập trình chọn file native. Dùng ValueCallBack interface của WebKit
giúp chuyển dữ liệu từ trình chọn file Android sang mã JavaScript.
Ở trong phương thức onActivityResult
, khi ta lấy được dữ liệu, chỉ cần chuyển nó vào uploadFile
instance theo cách sau:
uploadFile.onReceiveValue(results);
Và lúc này dữ liệu được chọn đã được chuyển từ Android sang JavaScript.
Tham khảo
https://betterprogramming.pub/5-android-webview-secrets-you-probably-didnt-know-b23f8a8b5a0c
https://developer.android.com/reference/android/webkit/WebView