在 WebView 中拦截 "file:" scheme 请求

Intercept "file:" scheme requests in WebView

我将 JS 代码加载到 WebView 中。此 JS 代码使用 file: 方案 uri 请求一些文件。这些文件是加密存储的,我想及时在 Java 代码中解密它们 JS 模块请求它们。我知道如果这些请求是通过 http: 方案进行的,那么我可以设置本地 http 服务器并将解密的内容通过它传递给 JS 模块。有什么方法可以使用 file: 方案 uri 将解密内容传递给 JS 模块?

创建一个覆盖 shouldInterceptRequest(WebView view, WebResourceRequest request)WebViewClient 子类,并将其附加到您的 WebView:

webview.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {

        if ("file".equals(request.getUrl.getScheme())) { // plus your other conditions, of course

            String mimeType = ... // your mime type
            String encoding = ... // your character encoding
            ...

            InputStream data = ... // open stream to your decrypted file data
            return new WebResourceResponse(mimeType, encoding, data);

        } else {
            return null;  // tell WebView to handle it
        }
    }
});