我需要向 WebView 中加载的页面添加自定义标头,但它不起作用,标头未设置:
@Override
public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)
{
request.getRequestHeaders().add("MyHeader","MyValue");
return super.shouldInterceptRequest(view, request);
}
我在这里做错了什么?我运行的是 Android 5。
我看到很多答案说你必须执行 HTTP 请求并返回WebResourceResponse
你自己。这是因为即使你像我一样修改标题,它们也会被忽略吗?
我还试图在Android源代码中找到调用的位置
调用 shouldInterceptRequest 的位置在哪里,以便我可以自己查看它是如何工作的,但我找不到它。
我自己找到了答案,就在那里docs https://developer.android.com/reference/android/webkit/WebViewClient.html#shouldInterceptRequest(android.webkit.WebView,%20android.webkit.WebResourceRequest):
如果返回值为null,WebView会继续加载
资源如常。否则,返回响应和数据将是
用过的。
此外,一个简单的测试显示了基本实现WebViewClient.shouldInterceptRequest
回报null
。所以WebView基本上继续像往常一样加载资源。
换句话说,我不能只向标头添加一个值并期望它被使用。
我实际上需要自己执行请求并返回响应。
太糟糕了,没有办法只修改标头并让默认实现使用它。
我知道我可以通过调用设置标题loadUrl
方法与标题,但如果我首先加载本地页面然后加载在线页面,则不会使用标题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)