【发布时间】:2016-05-05 08:02:57
【问题描述】:
我需要保存在 WebView 上显示的数据。 我通过保存在 WebViewClient 中发出的所有 URL 请求并将它们发送到后端服务来实现这一点。后端服务稍后会请求这些文件。
问题是 WebViewClient 正在运行它自己的周期并且响应不可见,这导致我为每个资源发出两个请求。
有什么方法可以直接在 WebViewClient 中获取数据?
这是一段正在运行的当前代码:
private class Client extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
plainText = //get plain text and save it
webView.loadDataWithBaseURL(url, plainText, MIME_TYPE_TEXT_HTML, UTF_8_ENCODING, null);
return true;
}
@SuppressWarnings("deprecation")
@Override
public synchronized WebResourceResponse shouldInterceptRequest(WebView view, String url) {
// we need to make sure it does nothing in this one for >= lollipop as in lollipop the call goes through both methods
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
return interceptRequest(view, url, null);
}
return null;
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
WebResourceResponse response = super.shouldInterceptRequest(view, request);
final String url = request.getUrl().toString();
return interceptRequest(view, url, response);
}
private WebResourceResponse interceptRequest(WebView webView, String url, WebResourceResponse webResourceResponse) {
addUrlToDownloadQueue(url);
return webResourceResponse;
}
addUrlToDownloadQueue(url); 负责将所有 url 传递给检索所有源的服务。
有什么方法可以在不将数据传递给后端服务的情况下获取 WebViewClient 上的数据?
【问题讨论】:
-
我还没有完全理解你想要达到的目标。您想从 WebView 读取/获取数据还是要将数据插入 WebView?
-
@LorenzoCamaione,两者都有。第一次访问网页想读取/获取数据,下次访问特定网页想将数据插入WebView
-
@Yazan,我不是在处理 javascript.. 处理好了..
-
@Vishal,我的后端服务保存所有 .js .css .hml ..etc 文件及其名称。当用户离线时,所有这些文件都保存在手机上。而不是显示用户离线页面,我可以向他们显示保存的页面。我不必使用任何 java 脚本。而不是 webView.loadUrl(url) 我调用 webView.loadDataWithBaseURL(url, data, mimeType, encoding, mHistoryUrl)