我想问一下,是否有可能检查WebView中包含的某些数据的文件大小。
假设我加载的网页包含少量图片,少量JavaScript文件等。
现在我需要做的是获取这些文件的大小(以字节为单位)。
如果我理解正确,那些文件应该在缓存中下载,因此它们存在。我想避免的是重新下载这些文件只是为了获得它们的大小(我可以手动解析HTML并逐个重新下载)。
这可能吗?还是其他任何方式?我真的不关心显示页面,它会在后台发生,我需要的是关于网页中包含的文件的数据。
答案 0 :(得分:0)
不是100%肯定,但我认为这可能有效:
为您的WebView创建一个WebViewClient实现,在实现中重写方法:“ShouldInterceptRequest”,或方法“ShouldOverrideUrlLoading”。 这些函数(尤其是第一个函数)为您提供webview尝试加载的任何资源的URL(包括图像和脚本)。 保留这些网址的列表,并确保返回Null作为该功能的结果,因此webview将照常继续加载页面。 最后,您将获得页面所需的所有资源的URL的最终列表(包括在ajax中加载的内容以及从其他URL内部加载的内容) - 然后您可以使用HTTPConnection或列表下载列表中的所有内容。无论如何,并知道尺寸。
答案 1 :(得分:0)
您可以使用" HEAD"获取任何网址的标题(包括内容长度)。 http请求方法。通过这种方式,除标题外不会下载任何数据。
使用setRequestMethod("HEAD")
来做到这一点
例如:
HttpURLConnection connection;
String url = "http://cdn.sstatic.net/stackoverflow/img/sprites.png?v=3c6263c3453b";
try {
connection = (HttpURLConnection) ( new URL(url)).openConnection();
connection.setRequestMethod("HEAD");
connection.connect();
String contentLength = connection.getHeaderField("Content-Length");
Toast.makeText(getBaseContext(), contentLength, Toast.LENGTH_LONG).show();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
答案 2 :(得分:0)
希望它对你有所帮助。祝你好运!
根据我的经验,我会这样做:当有一些资源需要加载/请求时,WebKit会通知*客户端。因此,您可以将URL保存在" onLoadResource"中,并在" shouldInterceptRequest"中检查它们的请求,以查看是否存在重复项。您只需返回一个空的WebResourceResponse即可避免数据加载。
e.g:
// webView is an instance of android.webkit.WebView
webView.setWebViewClient(mWebViewClient);
private WebViewClient mWebViewClient = new WebViewClient() {
/**
* Notify the host application of a resource request and allow the application
* to return the data.
* If the return value is null, the WebView will continue to load the resource
* as usual.
* Otherwise, the return response and data will be used.
*
* NOTE: This method is called by the network thread so clients should
* exercise caution when accessing private data.
*
* */
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
...
if (duplicate)
return NullWebResourceResponse();
return null;
}
/*
* Notify the host application that the WebView will load the resource
* specified by the given url.
*/
@Override
public void onLoadResource(WebView view, String url) {
//Log.d(LOGTAG, view.getClass().getSimpleName() + " - loading(" + url + ")...");
};
};