【问题标题】:Android - Making Webview DomStorage persistant after app closedAndroid - 在应用程序关闭后使 Webview Dom Storage 持久化
【发布时间】:2011-05-08 14:47:26
【问题描述】:

我在开发一个使用 Webview 来显示数据的 Android 应用程序时遇到了一个巨大的问题。我在 webview 中使用的网站使用 HTML 5 的 localStorage API。

要启用此功能,我已将 webview 设置如下:

webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setJavaScriptEnabled(true);

所以 localStorage API 可以工作,但是当我关闭应用程序(并终止进程)时,localStorage 被完全擦除,当我重新加载它时,我的所有数据都丢失了。

我的问题很简单:如何让 Webview 的 DomStorage 持久化,即使我们关闭了应用程序?

感谢您以后的所有回答。

【问题讨论】:

  • 我找到了解决方案,你需要设置databasePath才能保存数据:webview.getSettings().setDatabasePath();
  • 你能分享一下你设置的路径吗?我现在面临同样的问题。
  • 我的回答解决了你的问题吗?
  • 是否可以直接从java中读取html5设置的本地存储变量?我在别处发现了这个问题,但似乎没有人有答案?

标签: android webview local-storage persistent


【解决方案1】:

您是否设置了 DatabasePath?默认情况下Android不知道将DOMDatabase保存在哪里,如果你不设置它调用

webview.getSettings().setDatabasePath()

【讨论】:

  • 请注意,您只能调用一次 setDatabase path - 后续调用将被忽略。您需要在任何后续调用生效之前终止应用程序以强制 WebKit 重新加载(调用 Activity.finish() 不会保证这一点)
【解决方案2】:
// Confimed on android 2.1 emulator
// enable javascript localStorage

WebSettings webSettings = myWebView.getSettings();
webSettings.setDomStorageEnabled(true);   // localStorage

// e.g., if your package is www.myapp.whatever;
webSettings.setDatabasePath("/data/data/www.myapp.whatever/databases/");

【讨论】:

  • 在 andorid 2.2 中怎么样,不管它是否工作,因为对我来说,它在 2.1 中工作但在 2.2 中没有
  • 如果您在使用此用法时遇到“setDatabasePath deprecated”错误,则在 chromium webkit 浏览器中会自行处理路径。 See this answer for more
【解决方案3】:

您必须启用数据库并设置其路径:

webview.getSettings().setDatabaseEnabled(true);
webview.getSettings().setDatabasePath();
webSettings.setDomStorageEnabled(true);

第一行让我愣了好久……

【讨论】:

    【解决方案4】:

    上面的帖子混合了两个不同的概念:

    要让您的数据在会话关闭后仍然存在,请确保您没有使用(在您的 javascript 上)sessionStorage

    DOMStorage 和数据库存储是两个不同的东西。数据库存储不是 HTML5 的一部分:http://www.tutorialspoint.com/html5/html5_web_sql.htm

    DOMStorage 与 HTML5 更相关,并且包括会话存储,根据设计,它会在您关闭浏览器时消失。通过搜索“本地存储”而不是“DOM 存储”,您会发现更多点击。

    http://viralpatel.net/blogs/introduction-html5-domstorage-api-example/

    因此,要启用 DOMstorage,您只需要: webSettings.setDomStorageEnabled(true);

    【讨论】:

      【解决方案5】:

      此问题已在in this post 得到答复,并针对 Android v4.1.1 进行了更新。

      【讨论】:

        【解决方案6】:
        WebSettings webSettings = myWebView.getSettings();
        webView.getSettings().setDatabaseEnabled(true);
        

        这就是最新 API 所需要的一切。数据库路径由chrome自动管理

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-24
          • 2012-04-18
          • 2017-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多