WebView 默認點擊鏈接會彈出系統選擇器打開外部瀏覽器,且加載 file:///android_asset/ 本地頁面互相跳轉易黑屏。解決核心在於設置 WebViewClient 並覆寫 shouldOverrideUrlLoading。
WebView webView = findViewById(R.id.webview);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccess(true); // 允許訪問 file://
settings.setAllowFileAccessFromFileURLs(true); // API 16+ 允許本地文件訪問本地文件
settings.setAllowUniversalAccessFromFileURLs(true); // API 16+ 允許本地文件訪問網絡
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
view.loadUrl(url); // 所有鏈接在當前 WebView 打開
return true;
}
// 兼容 API 24 以下
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
// 錯誤頁面友好提示
view.loadUrl("file:///android_asset/error.html");
}
});
// 加載入口頁面
webView.loadUrl("file:///android_asset/html/PageOne.html");
<a href="PageTwo.html">,WebView 會自動解析為同目錄下文件。assets/html/ 下文件名大小寫(Linux 區分大小寫)。