【问题标题】:Is it possible to detect if Android webview's goBack() will load content from cache?是否可以检测 Android webview 的 goBack() 是否会从缓存中加载内容?
【发布时间】:2016-01-21 09:18:57
【问题描述】:

我遇到了 Android webview 的 goBack() 不发送自定义请求标头和 cookie 的问题。我试图通过在 goBack() 上重新加载整个页面来解决这个问题,但只有当 goBack() 不会从缓存中加载内容时才应该这样做。有没有办法以编程方式检测 webview 的 goBack() 是否将从缓存中加载内容。谢谢。

【问题讨论】:

    标签: android android-webview


    【解决方案1】:

    如果加载不是来自缓存,那么它将通过WebViewClient.shouldInterceptRequest。请注意,在goBack 的情况下,不会调用shouldOverrideUrlLoading,因为不会调用通过Java API 调用启动的导航。

    【讨论】:

    • 谢谢。从技术上讲,我们可以检测 goBack 是否会从缓存中加载,但是使用 shouldInterceptRequest,我仍然不清楚如何实现我想要的。 shouldInterceptRequest 要么返回 null(这将使 goBack() 在没有 cookie/自定义标头的情况下自行执行请求)或 Web 响应(我不想要)。您对我如何 i) 如果页面被缓存则使用 goBack 默认行为有什么建议,以及 ii) 如果页面未缓存,则调用 loadUrl 并从历史堆栈中删除当前页面?
    • 事实上,我非常有兴趣检查您关于goBack 不发送自定义标头或cookie 的断言。这不应该是这样。您是否有重现此行为的简化示例?在哪个版本的 Android 和 WebView 包上会发生这种情况?我的意思是,弄清楚goBack 有什么问题应该是第一要务,考虑如何解决这个问题是次要的。
    • 这肯定会发生在某些特定的 Android 版本上(Jelly Bean 左右,我可以与我的团队仔细检查)。我正在用 Lollipop 重写这个组件,在 chrome 的网络选项卡中检查时我没有看到 cookie/自定义标头,所以我想我遇到了同样的问题。但是我检查了服务器端,它确实从 goBack() 的请求中获取了 cookie/自定义标头,所以现在一切都很好。谢谢。
    • 是的,我已经检查过了,JellyBean 和旧版本的 WebView 确实不会在后退/前进导航中注入自定义标题。我想,解决这个问题的唯一方法是通过shouldInterceptRequest 完全实现您自己的资源加载,但这并非易事,现在不应该认真考虑 JellyBean 手机。感谢您指出 DevTools 中缺少自定义标头 - 我会检查一下。
    猜你喜欢
    • 2015-12-14
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2011-05-31
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多