我需要向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源代码中查找对WhereIntercallRequest的调用的位置的位置,以便我自己查看其工作方式,但找不到。
我自己找到了答案,就在docs中:
如果返回值为null,则WebView将照常继续加载资源。否则,将使用返回响应和数据。
此外,一个简单的测试示出了基实现的WebViewClient.shouldInterceptRequest
收益null
。因此,WebView基本上继续像往常一样加载资源。
换句话说,我不能只向标头添加一个值并期望它被使用。我实际上需要亲自完成请求并返回响应。
太糟糕了,无法修改标头并让默认实现使用它。
我知道我可以通过调用loadUrl
带有标头的方法来设置标头,但是如果我先加载本地页面然后加载在线页面,则不会使用标头。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句