在Android WebView中,是否可以在每次请求之前查看标题



在Android中,WebView(加载页面时(用于用户导航和自动重定向-我可以在每次请求之前查看标题吗?

我只想查看标题并让请求继续进行。

感谢

您可以创建一个WebViewClient来处理请求,该客户端允许您处理请求并解析头响应,如Volley:

private WebViewClient getWebViewClient() {
return new WebViewClient() {
@Override
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean shouldOverrideUrlLoading(final android.webkit.WebView view, WebResourceRequest request) {
android.util.Log.d("Headers", "New request: " + request);
if (request.getRequestHeaders() != null) {
for (Map.Entry<java.lang.String, java.lang.String> entry : request.getRequestHeaders().entrySet()) {
android.util.Log.d("Headers", "Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
}
doVolleyRequest(view, request.getUrl().toString());
return true;
}
@Override
public boolean shouldOverrideUrlLoading(android.webkit.WebView view, String url) {
android.util.Log.d("Headers", "New url: " + url);
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.d("onPageStarted", url);
}
};
}
private void doVolleyRequest(final WebView webView, String url) {
StringRequest getRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// response
Log.d("Response", response);
webView.loadDataWithBaseURL(null, response, "text/html", "utf-8", null);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", error.getLocalizedMessage());
}
}
) {
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
Map<String, String> responseHeaders = response.headers;
if (responseHeaders != null) {
for (Map.Entry<java.lang.String, java.lang.String> entry : responseHeaders.entrySet()) {
android.util.Log.d("Headers", "Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
}
return super.parseNetworkResponse(response);
}
};
RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
queue.add(getRequest);
}

并在加载url之前将其分配给网络视图:

WebView webView = (WebView) findViewById(R.id.webview);
webView.setWebViewClient(getWebViewClient());
String url = "https://***********";
doVolleyRequest(webView, url); // webView.loadUrl(url);

请记住,您需要在渐变依赖项中添加凌空抽射:

implementation 'com.android.volley:volley:1.1.1'

通过重写shouldOverrideUrlLoading()方法,它记录请求标头并将响应html分配给Web视图,这样Web视图就不必自己加载url。

最新更新