gpt4 book ai didi

java - Android 4.0 -> 4.3(包括在内)- WebView 页面之间的网络存储丢失

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:26:36 24 4
gpt4 key购买 nike

我正在开发一个 Android 项目,该项目依赖于 WebView 来浏览存储在设备上的多个 HTML 页面,并在需要时将输入提交到 webview 以将它们存储在数据库中。

每个页面包含与 jQuery 绑定(bind)到上一页/下一页的控件,每个页面包含不同类型的输入(复选框、文本字段等)。

最后一页包含一个提交按钮,该按钮使用 JSInterface 将结果保存在 SQLite 数据库中。

另一个按钮(在自定义顶部导航栏中)提供相同的系统。

可以通过访问包含所有已保存输入的第一个页面来修改结果,jQuery 系统将填充相应的输入。

有关详细信息,我正在使用 SDK 19 并针对 4.4.2 进行编译,但我以前使用的是 SDK 15> 并针对 4.2.2 进行编译,但我没有遇到问题。

如果有人需要查看已完成的操作,在简化的系统中,检查此 JSBin .


问题

我正在使用 SessionStorage 来存储页面之间的输入,我曾经使用 cookie,但当超过 150 个键/值对时它们变得不可靠。

我的问题是,在某些设备上,SessionStorage 在页面之间消失了。


测试协议(protocol)

第一种情况——只停留在首页

如果我只停留在第一页,填写输入然后发送结果,一切都很好。返回进行修改为我提供了一个完整的第一页。

第二种情况——在页面之间移动

填写第 1 页后,我转到第 2 页并填写新的输入,然后在页面之间移动以查看输入是否在每个单独的页面上丢失。一切就绪,但如果我发送结果,则只会传输当前页面输入。


Android版本测试结果

  • 3.2 - 有效

  • 4.1.2 - 不起作用

  • 4.2.1 - 不起作用

  • 4.3 - 不起作用

  • 4.4.2 - 有效


测试解决方案

  • 覆盖 WebViewClientshouldOverrideUrlLoading 方法以返回 False - 不起作用

  • 使用 LocalStorage 而不是 SessionStorage 并没有改变什么

见解

sessionStorage 切换到 localStorage 没有帮助。

我找到了一些 useful informations关于 Android 使用的 WebKit 版本:

Android 3.2.1 使用的是相当旧的版本,但它可以工作 (v534.13)

4.04.3

Android 版本共享相同的 WebKit 引擎 (v534.30)

Android 4.4 使用了它的一个全新版本 (v537.36),这解释了它的工作原理

这不是解决问题的一步,而是可以更准确地了解问题及其影响的设备。

解决方案

自 SDK 16 以来,强制执行新的安全设置以防止 Javascript 代码访问来自任何来源的内容。

if(Build.VERSION.SDK_INT >= 16) {
setting.setAllowUniversalAccessFromFileURLs(true);
}

感谢 ksasq 发现了这个!

[编辑 18/02/2014]

经过一些测试,我将问题指向 TargetSdkVersion,BuildTarget 没有任何改变。

如果设置为 15,WebStorage 将按预期工作。

如果设置为 16 或更高,WebStorage 就会出错。

最佳答案

在 ICS (SDK 15) 和 JellyBean (SDK 16) 之间,WebView 的安全模型及其处理来自 file://源的 javascript 的方式发生了一些变化。请尝试调用

WebSettings.setAllowUniversalAccessFromFileURLs(true)

确认您正在使用 file://URL 并信任您显示的内容。我想,由于在 4.4 中升级到 Chromium WebView,底层实现中发生了一些其他变化,不再需要这些设置。

关于java - Android 4.0 -> 4.3(包括在内)- WebView 页面之间的网络存储丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21631510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com