我正在通过调用以下方式向所有webview的请求添加自定义标头:
webview.loadUrl(url, myHeaders)
并重载webview客户端:
shouldOverrideUrlLoading()
在浏览和深度链接时,所有请求都有自定义标头,但所有webview的goBack()
请求都没有。 <{1}}被调用时不会调用shouldOverrideUrlLoading()
。
我想知道如何确保goBack()
请求中始终包含自定义标头?
答案 0 :(得分:0)
通常,WebView会在返回导航历史记录时重新发送额外的标题,我已经对其进行了简单测试,但它似乎有效。但是,有几个时刻可能令人困惑,所以我建议重新检查一下你的场景中发生了什么:
当您调用goBack()
时,WebView甚至可能无法重新联系服务器以加载页面 - 它只能从缓存中恢复页面。为了强制从服务器重新查询页面,后者必须使用cache-control
标题cache-control: no-cache,no-store
禁用页面缓存。在这种情况下,如果页面是通过loadUrl
加载了额外的标题,则会重新发送这些标题。
如果用户单击加载了额外标题的页面上的链接,则这些标题不会被您导航到的页面“继承”(对于JS代码完成的导航也是如此)。因此,如果您正在调用goBack
并且上一页已从用户点击加载,则它将不会通过loadUrl
加载起始页面的任何额外标题。
shouldOverrideUrlLoading
仅针对用户或服务器操作导致的负载调用,而不是针对通过WebView API方法(例如loadUrl
或goBack
启动的负载调用),因为应用已经知道它即将在某处导航WebView。例如,如果您通过google.com
加载loadUrl
,原始导航将不会被shouldOverrideUrlLoading
拦截,而是由服务器执行的重定向,例如到https
页面,将会是。
希望它有所帮助。如果你仍然怀疑WebView没有重新发送额外的标题,我强烈建议你准备一个简单的repro案例来证明它。