将 HTML 文件加载到 WebView

新手上路,请多包涵

我有一个本地 html 页面以及它指向的其他几个资源(css 文件和 Javascript 库),我想将它们加载到 WebView 中。这怎么可能实现?

也许不是最好的方法,但我仍在尝试。

原文由 klaus johan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
1 个回答

从官方指南 https://developer.android.com/develop/ui/views/layout/webapps/load-local-content

  1. 将 HTML 作为资产存储在 app/src/main/assets/
  2. 使用 WebViewAssetLoader 加载资产。在您的 onCreate() 中构建它,如下所示:
 final WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder()
         .addPathHandler("/assets/", new WebViewAssetLoader.AssetsPathHandler(this))
         .addPathHandler("/res/", new WebViewAssetLoader.ResourcesPathHandler(this))
         .build();

  1. 子类 WebViewClient 包装 WebViewAssetLoader
 private static class LocalContentWebViewClient extends WebViewClientCompat {

    private final WebViewAssetLoader mAssetLoader;

    LocalContentWebViewClient(WebViewAssetLoader assetLoader) {
        mAssetLoader = assetLoader;
    }

    @Override
    @RequiresApi(21)
    public WebResourceResponse shouldInterceptRequest(WebView view,
                                     WebResourceRequest request) {
        return mAssetLoader.shouldInterceptRequest(request.getUrl());
    }

    @Override
    @SuppressWarnings("deprecation") // to support API < 21
    public WebResourceResponse shouldInterceptRequest(WebView view,
                                     String url) {
        return mAssetLoader.shouldInterceptRequest(Uri.parse(url));
    }
}

这基本上将请求 URL 传递给 WebViewAssetLoader 以从资产加载 Web 内容。

  1. 使用 assetLoader 从(2)构造 WebViewClient 从(3),并将其设置在您的 WebView 中。您的 index.html 可以使用 https 和默认域 appassets.androidplatform.net 加载:
 mWebView.setWebViewClient(new LocalContentWebViewClient(assetLoader));
mWebView.loadUrl("https://appassets.androidplatform.net/assets/index.html");

请注意,使用类似 Web 的 URL 而不是 file:// 加载本地文件是可取的,因为它与同源策略兼容。

原文由 dejvuth 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题