【问题标题】:Is it possible to modify requests sent by WebView for HTML Offline Caching是否可以修改 WebView 发送的用于 HTML 离线缓存的请求
【发布时间】:2014-05-05 09:52:35
【问题描述】:

我在 WebView 中使用 HTML5 离线缓存,我尝试加载的资源位于基于用户代理检查提供不同版本的 webServer 上。

我可以通过指定 User-Agent 来加载所需版本的网站 URL: webView.getSettings().setUserAgentString(userAgent);

但似乎此设置不适用于为应用程序缓存资源检索而发送的请求。

有什么方法可以让我修改为应用程序缓存发送的请求?或者至少为 WebView 发送的所有请求设置 User-Agent 标头?

感谢您的帮助。

【问题讨论】:

  • 这有点奇怪。您在哪个版本的 Android 上看到此内容?
  • 我在 Android 4.4.2 (SDK Api Level 19) 上测试这个
  • 你很可能在 webview 中发现了这个 bug。对于那个很抱歉!我在这里提交了一个错误:code.google.com/p/chromium/issues/detail?id=360032,如果您能提供任何具体的重现步骤,那就太好了。
  • 感谢您的回答@marcin.kosiba,我会尝试将包含 HTML 和 Android 源代码的存档添加到您提到的错误报告中。
  • 有什么解决方法吗?比如设置另一个http头,或者只是一种检测请求与appcache相关的方法?

标签: android android-webview html5-appcache offline-mode


【解决方案1】:

如果您有权访问服务器,您可以使用会话来存储用户代理并在下一个请求中使用它。 这个想法是第一个请求将包含正确的用户代理,但我们不能相信下一个请求,因为其中至少一个将来自应用程序缓存并且将包含不同的用户代理。 因此,一种解决方法(如果您可以访问服务器)是:

  1. 在第一次访问期间将用户代理保存到会话中。
  2. 在所有下一个请求中使用您保存到会话中的用户代理。

这里有一段 PHP 代码说明了这一点。

// Get the user agent from the browser.
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (isset($_SESSION['_correctUserAgent'])) {
    // There is already a user agent in the session, so, use it.
    $userAgent = $_SESSION['_correctUserAgent'];
} else {
    // There is no user agent in the session, so, save it for next requests.
    $_SESSION['_correctUserAgent'] = $userAgent;
}

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 2013-12-05
    • 2011-12-10
    • 2016-03-18
    • 2011-05-31
    • 1970-01-01
    相关资源
    最近更新 更多