Android 4.0 -> 4.3(包含) - Web 视图页面之间的 Web 存储丢失

2024-03-14

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

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

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

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

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

有关更多详细信息,我正在使用SDK 19并针对4.4.2,但我曾经与SDK 15并针对4.2.2我没有遇到问题的地方。

如果有人需要查看在简化的系统中做了什么,请检查此JSBin http://jsbin.com/qaxoh/5/edit?html,js,output.


问题

我在用着会话存储为了存储页面之间的输入,我曾经使用 cookie,但是当有超过 150 个键/值对时它们变得不可靠。

我的问题是,在某些设备上,会话存储消失在页面之间。


测试协议

第一种情况 - 仅停留在第一页

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

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

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


Android版本测试结果

  • 3.2 - Works

  • 4.1.2 - 不起作用

  • 4.2.1 - 不起作用

  • 4.3 - 不起作用

  • 4.4.2 - Works


经过测试的解决方案

  • 覆盖网页浏览客户端's 应该覆盖Url加载返回 False 的方法 -不起作用

  • Using 本地存储而不是 SessionStorage 并没有改变什么

Insights

切换自会话存储 to 本地存储没有帮助。

我找到了一些有用的信息 http://jimbergman.net/webkit-version-in-android-version/关于 Android 使用的 WebKit 版本:

安卓3.2.1使用一个相当旧的版本,但它可以工作(v534.13)

Android版本范围从4.0 to 4.3共享相同的WebKit引擎(v534.30)

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

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

Solution

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

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

感谢ksasq为了找到这个!

[编辑 2014 年 2 月 18 日]

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

它被设置为15,WebStorage 按预期工作。

如果设置为16或更高,WebStorage 搞砸了。


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

WebSettings.setAllowUniversalAccessFromFileURLs(true)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 4.0 -> 4.3(包含) - Web 视图页面之间的 Web 存储丢失 的相关文章

  • 改变换行行为

    我可以在 TextView 中使用 Spannable 创建具有不同外观 下划线 删除线等的跨度 我怎样才能做同样的事情来改变换行行为 特别是 我不希望电子邮件地址在中间换行 我希望它像一个单词一样 I tried 包裹在一起跨度 http
  • 如何在打开导航抽屉时使背景 Activity 变小?

    我想做我的背景Activity打开时稍微小一点Navigation Drawer 模拟存在的效果Airbnb应用 我想最好的解释是截图 但重点不是让 View 变小 而是让它成为与 Drawer 打开 关闭动画同步的动画 因此 如果您开始打
  • 将 try catch finally 块放入另一个 finally 块中

    try catch finally try catch finally 上面的代码好不好 是的 你可以这样做 实际上 在处理想要正确关闭的流时 您甚至需要这样做 InputStream in try catch finally try in
  • 如何在Android JUnit测试用例中调用Button.performClick?

    我是 Android 测试方面的新手 我想测试单击按钮是否会打开相应的活动 我做了一些研究 发现我需要使用 ActivityManager 来进行检查 问题是 我无法让 点击 部分正常工作 我正在尝试使用Button performClic
  • jquery 中 DOM 元素的手动垃圾回收是否可以提高浏览器性能?

    在性能范围内 删除不再需要的元素是否有意义 或者浏览器是否对代码中未进一步引用的 dom 元素执行自动垃圾收集 some element fadeOut 1000 function el el remove lt does this mak
  • libgdx SpriteBatch 渲染到纹理

    是否可以使用 libGdx 适用于 Android 桌面的 Java 引擎 中的 SpriteBatch 渲染到纹理 如果是这样 怎么办 基本上我想将所有内容渲染到 512 x 256 纹理的 320 x 240 区域 然后缩放区域以适合屏
  • Guava MultiSet 与 Map?

    我对Multiset的理解是一个带有频率的集合 但是我总是可以使用Map来表示频率 还有其他原因使用Multiset吗 优点Multiset
  • 表达式的类型必须是数组类型,但它解析为浮点数

    当我编写 Java 代码时 我遇到了困难 我觉得我不知何故把这个概念弄乱了 就像我不确定这一点 void setScore float sco sco score public void setScore float sco int id
  • SWIG C 函数指针和 JAVA

    我有一些 C 代码 其中一个方法有一个函数指针作为参数 我正在尝试在我的 Android 应用程序中使用 C 代码 我决定使用 SWIG 来完成生成我需要的 java 文件的所有工作 一切都适用于常规函数 没有函数指针作为参数的函数 但我不
  • KML 中的 JavaScript 被 Google 地球插件忽略

    我创建了一个简单的 KML 文件 该文件可以在独立的 Google 地球客户端中运行 但在 Google 地球插件中根本无法运行 无论浏览器如何
  • Nodejs 解码 base64 并使用流将它们保存到文件中

    在我的node js应用程序中 我使用以下代码行解码base64编码的图像 const fileDataDecoded Buffer from base64EncodedfileData base64 到目前为止 我可以使用以下代码编写一个
  • java.lang.OutOfMemoryError:尝试将 Java 对象转换为 Json 字符串时的 Java 堆空间

    我尝试将 csv 文件转换为 200K 对象的 Json 文件 其中对象代表 csv 中的 1 行 我在 32 位上安装了 Java 并且项目配置 VM 参数 Xmx1024m 但是我得到 Exception in thread main
  • 注释处理工具<-检查有效注释

    I have ColumnMetadata index 1 ColumnMetadata index 2 ColumnMetadata index 3 我必须使用 APT 检查索引号是否唯一 我不知道该怎么做 我看不懂教程 一般我在网上找资
  • 如何使用Android Invalidate()

    在我的主要活动中 我定义了两个视图和一个菜单 浏览次数 1 自定义视图游戏 2 按钮btn 菜单 1 打开项目用于打开文件 菜单布局在不同的活动中定义 基本上 当主活动启动时 它会绘制没有任何内容的自定义视图和按钮 然后我使用菜单中的 打开
  • AAR 可以包含传递依赖吗? [复制]

    这个问题在这里已经有答案了 现在我有一个库项目 比如项目 Foo 它依赖于像 OkHttp 这样的库 现在 Foo 有一个 Maven 构建步骤 可以生成 AAR 并将其推送到公共位置 现在假设我有项目 B 我们将其称为 Bar Bar是一
  • 无法查询 ContentResolver 以从 my_downloads 获取下载文件的名称,但在 all_downloads 中工作正常

    我的应用程序设置为激活一次具有扩展名的文件 myappdata被打开 它通过这个意图过滤器来实现这一点
  • 使用 JQueryUI Autocomplete 和 Meteor 的规范方法

    使用 Meteor 我想了解使用 JQuery UI 自动完成处理大量服务器端数据的最有效方法 我有两个工作提案 想听听关于差异的意见 以及是否有更好的方法来做同样的事情 使用发布 订阅 Server Meteor publish auto
  • 智能手机可以通过 3G/4G 进行点对点通信吗?

    我正在尝试编写一个应用程序 将数据从一个 Android 设备传输到另一个 Android 设备 但这些设备很可能位于城市 州或国家的不同部分 直接的方法是拥有一台中央服务器 或任何类型的服务器 但我试图避免使用中央服务器 我试图传递的数据
  • Android,Volley请求,响应阻塞主线程

    使用 Volley 处理较大响应时会发生一些不好的事情 String url AppHelper DOMAIN service pages profile update json this infoTextView setText getS
  • 在哪里放置资源特定逻辑

    您能帮我考虑在 AngularJS 中将资源 服务 特定的业务逻辑放置在哪里吗 我觉得在我的资源上创建一些类似模型的抽象应该很棒 但我不确定如何做 API调用 gt GET customers 1 lt first name John la

随机推荐

  • 将拉丁mysql数据转换为utf8

    我现在想使用utf 8 但我所有的数据都是latin1 转换数据的有效方法是什么 我也知道如何将数据库的结构 字符集 更改为utf8 我想做的是更改现有数据的字符集 update 这是我的旧设置 html输出 utf8 html输入 utf
  • 在 webgl 中制作 2d HUD 的推荐方法

    对于 fps 性能很重要的 webgl 游戏 制作 2D HUD 最有效的方法是什么 我可以想到 3 个选项 但我不清楚每个选项的性能成本是多少 以及哪个选项最有效 那么以下 3 个选项之间的相对性能成本是多少 答 使用正交相机以 3D 形
  • 如何在 Ionic 4/Angular7 中从 @ViewChild 获取 nativeElement?

    我正在使用 Ionic 4 的离子搜索 如下所示
  • 在 python 中使用多个输出流?

    我要做的是在 python 函数中创建多个输出流 并将它们称为1 2 3 在test py def main print gt gt fd1 words1 print gt gt fd2 words2 print gt gt fd3 wor
  • 如何检查 Mac 操作系统中是否安装了特定应用程序/软件

    我想使用 Perl Shell 脚本检查 Mac 操作系统中是否安装了特定应用程序 我正在使用 PackageMaker 编写程序包 其中我需要在安装应用程序之前检查用户计算机上的一些应用程序 因此 我计划编写一个脚本来为我检查这一点 如果
  • 关于使用 this 实现 equals 来比较 Java 中的对象

    我看到了一个关于定义的代码段equals 来自本论坛的另一个问题线程 但我的问题是以下代码的作用是什么 为什么需要它 谢谢 if obj this return true 原代码如下所示 http stackoverflow com que
  • 在哪里可以找到示例 XHTML5 源代码?

    我在哪里可以找到样品XHTML 5 页面 我主要想知道是否可以将 XHTML 5 与其他 XML 语言 如 XHTML 1 混合搭配 例如 这样的内容在 XHTML 5 中有效吗
  • Netbeans 不允许 Python 2.6 作为默认平台(强制 Jython2.5)

    我试图让 Netbeans python 使用设置为 Python 2 6 1 我的系统 python 的默认 python 平台运行 因此在 Netbeans 中我执行以下操作 工具 gt Python 平台将 Python 2 6 1
  • 为什么数组协方差被认为如此可怕?

    在 NET 中 引用类型数组是协变的 这被认为是一个错误 但是 我不明白为什么这这么糟糕 请考虑以下代码 string strings new Hey there object objects strings objects 0 new o
  • 我应该在哪里存储配置文件?

    我需要通过Win8在WinXP中读取和写入配置文件到Windows磁盘 他们最好在哪里做这件事 ProgramData 文件夹似乎不允许 procedure TfrmMain FormCreate Sender TObject var pa
  • 输入验证以确保只有数字 c++

    好的 我正在尝试擅长使用指针 因此我正在尝试为用户输入编写输入验证 以确保正确处理任何非数字的内容 当我使用 isdigit 时 它对我不起作用 当我输入字母表时 我仍然遇到异常 有什么建议么 谢谢 看一下这个 include
  • 如何隐藏 Windows Gtk 应用程序的命令提示符?

    我正在使用 MinGW 工具链在 Windows 中编译 Gtk 应用程序 但是当我运行我的应用程序时 会出现一个命令提示符窗口 怎样才能让这个提示消失呢 Check 本文 http ricardo ecn wfu edu cottrell
  • ajax 调用循环 - 访问循环计数器?

    我被困在这里 任何帮助将不胜感激 我有一个项目列表框 我想通过 AJAX 调用 Web 服务 检索列表中每个项目的数据 需要根据调用数据的行来操作检索到的数据 如果我传入 row 参数 它的值始终比行数大 1 有没有办法传入 ajax 调用
  • 使用 lapply 和 which 按特征和功能对数据帧进行子集化

    我有一个包含 5 个维度数据的数据框 如下所示 gt dim alldata 1 162 6 gt head alldata value layer Kmultiplier Resolution Season Variable 1 0 01
  • JPA GROUP BY 实体 - 这可能吗?

    是否可以在 JPA 中选择数据并按引用实体分组 我的意思是 我有两个实体 保险和参考多对一车辆 保险实体具有 validTill 字段 当然还有车辆字段 我想选择车辆及其最新的保险 下面的查询不起作用 SELECT DISTINCT v v
  • 如何在Pygame环境中绘制矩形和圆形

    我正在尝试创建一个具有各种形状的精灵的 pygame 环境 但我的代码似乎不起作用 这是我所拥有的 class Object pygame sprite Sprite def init self position color size ty
  • 在 codeigniter 中一起更新和连接查询?

    连接两个表时更新数据 但在 where 条件下出现错误 我可以在查询中同时使用连接和更新吗 这是我的代码 public function update model id array data textArea data textdata t
  • 在 C 中访问 ELF 符号表

    我正在编写一个程序来模仿elfdump ecps 目前它可以正确打印 elf 标头 程序标头和节标头 但我陷入了符号表的最后几个部分 所需的输出格式为 Symbol Table Section dynsym index value size
  • 如何显示图片并获取鼠标点击坐标[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道是否可以在Python Windows 中显示一些图片 然后用鼠标单击该图片并获取该单击相对于图片边缘的坐标 Thanks 是
  • Android 4.0 -> 4.3(包含) - Web 视图页面之间的 Web 存储丢失

    我正在开发一个 Android 项目 该项目依赖于WebView浏览设备上存储的多个 HTML 页面 并在需要将输入存储到数据库时将输入提交到 Web 视图 每个页面都包含与 jQuery 绑定到上一页 下一页的控件 每个页面包含不同类型的