iOS'Web App'具有与Mobile Safari不同的localStorage
我有一个带meta标签的iPad的webapp:
<meta name="apple-mobile-web-app-capable" content="yes">
当我从主页(支持网页应用程序的版本)打开应用程序或在Mobile Safari中输入地址时,localStorage的内容不同。 我已经通过打印location.href确认地址是相同的。
移动Safari浏览器对localStorage进行的所有更改都反映在支持Web应用程序的版本中,但支持Web应用程序的版本所做的更改未反映在Mobile Safari版本中。
域是相同的,localStorage应该是相同的。 世界正在发生什么? 这可以解决吗?
更新 - 解决方案 :从接受的答案(迫使用户进入全屏模式)的建议#2我添加了这一点的代码:
if(("standalone" in window.navigator) && !window.navigator.standalone)
window.location = "instructions.html";
因此,如果您使用的是支持独立模式的浏览器,并且您没有处于独立模式,请将其重定向到一个页面(instructions.html),该页面向用户显示如何将该应用添加到主屏幕。
感谢大家的意见!
概要:
Safari和全屏Web应用程序(又名支持Web应用程序)具有单独的内存直写缓存localStorage数据。 每次全屏应用程序变为活动状态时,它都会从磁盘重新加载localStorage(允许它查看Safari的更改)。 但是,当Safari变为活动状态时,它不会从磁盘重新加载localStorage数据,因此它不会看到全屏应用程序中所做的更改,除非您杀死Safari并重新启动它。
完整说明:
计算机科学只有两个难题:
localStorage中的错误行为是问题#1的结果。 原因如下:
当iOS浏览器引擎加载时,它从磁盘读取localStorage的数据并将其缓存在内存中。 然后每次读取数据(例如getItem
)时,数据都从内存中读取,而不是从磁盘读取; 在写入数据(例如setItem
)时,数据被写入内存,然后(异步)刷新到磁盘。 由于localStorage是同步的,所以这个实现是完全合理的。 如果它进入磁盘进行所有读写操作,那么您的JavaScript将在每次读/写操作时被阻止,以执行昂贵的磁盘IO。
问题是,全屏Web应用程序(我们称之为FSWA)使用iOS浏览器引擎的单独实例,虽然FSWA在localStorage数据上共享磁盘上的相同位置,但它不共享内存缓存使用Safari的localStorage数据。
当您添加事实FSWA完全重新加载(这意味着localStorage数据从磁盘重新加载)每次他们成为活动应用程序时,您会看到您所看到的行为。
这是幕后...
为了证明这一点,您可以在步骤#4和步骤#10之间杀死Safari。 然后,当您在步骤#11中重新启动Safari时,它将从磁盘重新加载localStorage,您将看到由FSWA写入的数据。
在iOS5中,我能够在同一个域中有两个全屏Web应用程序,它们能够看到彼此的localStorage。 这克服了全屏和Safari之间的差异。
但是,在iOS6中,我不得不将两个全屏Web应用程序合并到一个应用程序中。
假设您正确保存本地存储数据,并且如果我没有弄错,那么您遇到的问题在Web应用程序开发人员中是一个常见问题 。 Cookies,会话和本地存储在“网络应用程序”(从主屏幕启动)中似乎以不同方式存储到通过移动Safari浏览器保存的数据中。
过去我已经做了一些相当彻底的测试,在我看来,没有任何解决方法够好 。 举个例子,我的同事和我遇到过类似的问题:在我们最近开发的一个Web应用程序中,用户必须先登录才能访问其所有功能。 如果通过移动Safari浏览器登录,然后切换到下载的应用程序版本,则预计会登录,但情况并非总是如此。 通常需要再次登录,这表明cookie可能存储在不同的“数据库”中,具体取决于您选择启动应用程序的方式或方式。
此外,正如加尔文所说,除了不同的数据库之外,还有更多不同之处。 通过主屏幕启动的应用程序似乎打开速度更慢,启动时总是重新加载主屏幕应用程序,提示没有多任务支持等。 我的结论:程序启动下载的网络应用程序!= safari减去地址栏,因此不应该这样对待。
虽然Apple提供了一个很好的功能,但主屏幕网络应用程序并不像预期的那样运行,也不像人们希望的那样运行(就像在safari中打开一样)。在您的情况下,假设您正确存储LS数据并尝试了不同的方法来修复特别的问题, 我会建议以下方法之一:
希望这有助于澄清至少部分内容。
链接地址: http://www.djcxy.com/p/90931.html上一篇: iOS 'Web App' has different localStorage than Mobile Safari