在 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
}
}
});
我将 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
}
}
});