Java Android WebView自定义标题
我目前正在使用此代码向androidJava Android WebView自定义标题,java,android,webview,header,Java,Android,Webview,Header,我目前正在使用此代码向androidWebView Map<String, String> extraHeaders = new HashMap<String, String>(); extraHeaders.put("example", "header"); webView.loadUrl(url, extraHeader); Map extraHeaders=newhashmap(); extraHeaders.put(“示例”、“标题”); loadUrl(url
WebView
Map<String, String> extraHeaders = new HashMap<String, String>();
extraHeaders.put("example", "header");
webView.loadUrl(url, extraHeader);
Map extraHeaders=newhashmap();
extraHeaders.put(“示例”、“标题”);
loadUrl(url,extraHeader);
上面的代码正在工作,但仅在主页上。因此,如果我编写这段代码echo$\u服务器['example']
它将打印标题
。但是在加载的URL中有一个iframe
,当我尝试相同的代码时,它显示了一个未定义的错误。我有办法解决这个问题吗
因此,我想做的是不仅在加载的主URL中添加自定义标题,而且在加载页面的
iframe
上添加自定义标题。不,这在Android WebView本身中是不可能的。您必须在页面代码、应用程序代码或服务器上进行修改
为了解决这个问题,可以使用XMLHttpRequest
加载子资源。但对于这一点,您基本上必须动态构建页面
在应用程序方面,您可以使用WebViewClient.shouldInterceptRequest
,拦截所有网络请求。您不允许只修改提供的请求,相反,您需要自己提出一个新的请求,但是您可以在那里设置任何您想要的头。请参见此示例:
在服务器端,您可以查看子资源的Referer
标题,该标题必须包含请求它的页面的url。这对我很有用:
mWebView.setWebViewClient(new MyWebViewClient(token));
在MyWebViewClient中
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
try {
OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(url.trim())
.addHeader("token", mToken) //add headers
.build();
Response response = httpClient.newCall(request).execute();
return new WebResourceResponse(
getMimeType(url), // set content-type
response.header("content-encoding", "utf-8"),
response.body().byteStream()
);
} catch (IOException e) {
return null;
}
}
//get mime type by url
public String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
if (extension.equals("js")) {
return "text/javascript";
}
else if (extension.equals("woff")) {
return "application/font-woff";
}
else if (extension.equals("woff2")) {
return "application/font-woff2";
}
else if (extension.equals("ttf")) {
return "application/x-font-ttf";
}
else if (extension.equals("eot")) {
return "application/vnd.ms-fontobject";
}
else if (extension.equals("svg")) {
return "image/svg+xml";
}
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return type;
}
您可以将此设置放到web设置中,来自webview的每个请求都将使用此
用户代理
标题
webview.getSettings().setUserAgentString(“用户代理字符串”)代码>只需在加载URL之前添加此代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
CookieManager.getInstance().removeAllCookies(null);
}
您将在何处添加此项?它仅适用于设置用户代理而不是自定义标题!是的,此代码仅用于设置您的用户代理头而不是自定义头,您可以在onCreate
中输入删除Cookie与添加头的关系的可能副本?