【问题标题】:Missing custom headers in webview' goBack() requestswebview 的 goBack() 请求中缺少自定义标头
【发布时间】:2016-04-03 21:48:46
【问题描述】:

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

webview.loadUrl(url, myHeaders)

并重载 webview 客户端:

shouldOverrideUrlLoading()

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

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

【问题讨论】:

    标签: android webview http-headers


    【解决方案1】:

    返回导航历史时,通常 WebView 会重新发送额外的标头,我已经对此进行了简要测试,它似乎可以正常工作。但是,有几个时刻可能会令人困惑,因此我建议重新检查您的场景中实际发生的情况:

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

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

    3. shouldOverrideUrlLoading 仅用于由用户或服务器操作引起的加载,而不是通过 WebView API 方法发起的加载,例如 loadUrlgoBack,因为应用程序已经知道它即将导航WebView 某处。例如,如果您通过loadUrl 加载google.com,则原始导航不会被shouldOverrideUrlLoading 拦截,而是服务器会进行重定向,例如到https页面,将。

    希望对您有所帮助。如果您仍然怀疑 WebView 没有重新发送额外的标头,我强烈建议您准备一个简单的重现案例来证明这一点。

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2018-04-15
      • 2018-04-06
      • 2015-11-08
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多