通过在shouldInterceptRequest中向WebResourceRequest的标头添加标头,向WebView添加自定义标头不起作用

Don*_*Box 3 android android-webview

我需要为WebView中的页面加载添加自定义标头,但它不起作用,标头未设置:

@Override
public WebResourceResponse shouldInterceptRequest (WebView view,  WebResourceRequest request)
{
    request.getRequestHeaders().add("MyHeader","MyValue"); 
    return super.shouldInterceptRequest(view, request);
}
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?我在Android 5上运行.

我已经看到很多答案,说你必须做HTTP请求并返回WebResourceResponse自己.这是因为即使你像我一样修改标题,它们也会被忽略吗?

我还试图在Android源代码中找到调用WhereInterceptRequest调用位置的位置,这样我就可以看到它是如何工作的,但我找不到它.

Don*_*Box 5

我自己找到了答案,它就在文档中:

如果返回值为null,则WebView将继续像往常一样加载资源.否则,将使用返回响应和数据.

此外,一个简单的测试显示了WebViewClient.shouldInterceptRequest返回的基本实现null.因此,WebView基本上继续像往常一样加载资源.

换句话说,我不能只为标头添加一个值并期望它被使用.我实际上需要自己做请求并返回响应.

太糟糕了,没有办法只修改标头并让默认实现使用它.

我知道我可以通过调用带头的loadUrl方法设置头文件,但如果我第一次加载本地页面然后加载在线页面,则不会使用头文件.