首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android WebView 加載 assets 目錄下 HTML 頁面的正確路徑寫法

     編輯:程式設計綜合問答

在 Android WebView 中加載 assets 目錄下的 HTML 文件,需使用標準 file:///android_asset/ 協議路徑,注意三個斜杠且區分大小寫。

正確路徑格式


// 正確:三個斜杠,android_asset 全小寫
webView.loadUrl("file:///android_asset/faq.htm");

// 目錄下文件
webView.loadUrl("file:///android_asset/folderName/index.html");

// 錯誤示例:
// file://android_asset/faq.htm (缺少一個斜杠)
// file:///android_asset//faq.htm (雙斜杠)
// file:///Android_Asset/faq.htm (大小寫錯誤)

完整實現代碼


WebView webView = findViewById(R.id.webview);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true); // 通常需要
settings.setDomStorageEnabled(true); // HTML5 本地存儲
settings.setAllowFileAccess(true); // 允許訪問文件
settings.setAllowContentAccess(true);

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        // 頁面加載完成回調
    }
    
    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        // 錯誤處理:顯示友好頁面
        view.loadUrl("file:///android_asset/error.html");
    }
});

webView.loadUrl("file:///android_asset/faq.htm");

assets 目錄結構


app/
└── src/
    └── main/
        └── assets/
            ├── faq.htm
            ├── css/
            │   └── style.css
            ├── js/
            │   └── main.js
            └── folderName/
                └── index.html

HTML 中引用同目錄資源





Logo

常見問題排查

現象原因解決
白屏/無內容路徑錯誤、JS 錯誤阻塞檢查路徑、開啟 JS、查看 logcat
CSS/JS 不生效HTML 中引用路徑錯誤使用相對路徑、確認 assets 目錄結構
圖片不顯示路徑大小寫、文件缺失Linux 區分大小寫、確認文件存在
無法訪問本地文件setAllowFileAccess(false)設置 true、API 29+ 需 setAllowFileAccessFromFileURLs

進階:WebViewAssetLoader (API 3+ 推薦)


// 現代安全方式,支援 HTTP(s) 模擬、CSP、混合內容
WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder()
    .addPathHandler("/assets/", new WebViewAssetLoader.AssetsPathHandler(this))
    .build();

webView.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        return assetLoader.shouldInterceptRequest(request.getUrl());
    }
});

webView.loadUrl("https://appassets.androidplatform.net/assets/faq.htm");
// 使用虛擬域名訪問 assets,更安全、支援現代 Web 標準

注意事項

  • assets 目錄文件打包進 APK,只讀,運行時不可修改
  • 大文件建議放在外部存儲或下載到內部存儲
  • Android 10+ 分區存儲不影響 assets 訪問
  • 混合內容 (HTTPS 頁面加載 HTTP/本地資源) 需配置 setMixedContentMode
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved