缺少webview中的自定义标头'goBack()请求

时间:2015-12-29 23:28:13

标签: android webview http-headers

我正在通过调用以下方式向所有webview的请求添加自定义标头:

webview.loadUrl(url, myHeaders)

并重载webview客户端:

shouldOverrideUrlLoading()

在浏览和深度链接时,所有请求都有自定义标头,但所有webview的goBack()请求都没有。 <{1}}被调用时不会调用shouldOverrideUrlLoading()

我想知道如何确保goBack()请求中始终包含自定义标头?

1 个答案:

答案 0 :(得分:0)

通常,WebView会在返回导航历史记录时重新发送额外的标题,我已经对其进行了简单测试,但它似乎有效。但是,有几个时刻可能令人困惑,所以我建议重新检查一下你的场景中发生了什么:

  1. 当您调用goBack()时,WebView甚至可能无法重新联系服务器以加载页面 - 它只能从缓存中恢复页面。为了强制从服务器重新查询页面,后者必须使用cache-control标题cache-control: no-cache,no-store禁用页面缓存。在这种情况下,如果页面是通过loadUrl加载了额外的标题,则会重新发送这些标题。

  2. 如果用户单击加载了额外标题的页面上的链接,则这些标题不会被您导航到的页面“继承”(对于JS代码完成的导航也是如此)。因此,如果您正在调用goBack并且上一页已从用户点击加载,则它将不会通过loadUrl加载起始页面的任何额外标题。

  3. shouldOverrideUrlLoading仅针对用户或服务器操作导致的负载调用,而不是针对通过WebView API方法(例如loadUrlgoBack启动的负载调用),因为应用已经知道它即将在某处导航WebView。例如,如果您通过google.com加载loadUrl,原始导航将不会被shouldOverrideUrlLoading拦截,而是由服务器执行的重定向,例如到https页面,将会是。

  4. 希望它有所帮助。如果你仍然怀疑WebView没有重新发送额外的标题,我强烈建议你准备一个简单的repro案例来证明它。