我需要向 WebView 中加载的页面添加自定义标题,但它不起作用,标题未设置:
@Override
public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)
{
request.getRequestHeaders().add("MyHeader","MyValue");
return super.shouldInterceptRequest(view, request);
}
我在这里做错了什么?我在 Android 5 上运行。
我在 SO 上看到很多答案,说您必须自己执行 HTTP 请求并返回
WebResourceResponse
。这是因为即使您像我一样修改标题,它们也会被忽略吗?我还试图在调用的 Android 源代码中找到位置
调用 shouldInterceptRequest 的位置在哪里,所以我可以自己查看它是如何工作的,但我找不到它。
最佳答案
我自己找到了答案,就在 docs 中:
此外,一个简单的测试显示 WebViewClient.shouldInterceptRequest
的基本实现返回 null
。所以 WebView 基本上会继续像往常一样加载资源。
换句话说,我不能只是向 header 添加一个值并期望它被使用。
我实际上需要自己做请求并返回响应。
太糟糕了,没有办法只修改 header 并让默认实现使用它。
我知道我可以通过使用标题调用 loadUrl
方法来设置标题,但是如果我首先加载本地页面然后加载在线页面,则不会使用标题。