shouldInterceptRequest

shouldInterceptRequest

我需要向 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 方法来设置标题,但是如果我首先加载本地页面然后加载在线页面,则不会使用标题。

10-06 06:50