iOS7 无法访问 HTML5 localStorage,如果 Cookies 被禁用
Posted
技术标签:
【中文标题】iOS7 无法访问 HTML5 localStorage,如果 Cookies 被禁用【英文标题】:iOS7 unable to access HTML5 localStorage, if Cookies is disabled 【发布时间】:2013-09-26 17:59:18 【问题描述】:在 ios7 上,尝试通过 javascript 访问 html5 localStorage 对象时,会停止执行 Javascript。它在以前的 iOS 版本中正常工作。 当应用程序全新安装并启动时,应用程序运行完美。但是,我关闭应用程序并再次启动,它不起作用并且无法访问 localStorage。
为了禁用 cookie,我使用了以下代码:
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];
为了访问 localStorage,我使用了以下代码:
CGRect rect = self.view.frame;
UIWebView* webView = [[UIWebView alloc] initWithFrame:rect];
[self.view addSubview:webView];
[webView loadHTMLString:@"<script>alert('hello world');alert(localStorage);</script>" baseURL:nil]
我浏览了 iOS7 文档,但找不到与此问题相关的任何更新。有没有人也遇到过这种情况?请分享有关此的任何信息,将非常有帮助。有什么解决方法吗?
谢谢
【问题讨论】:
很想听听您的发现。我们面临同样的问题。 我找不到解决此问题的方法。我无法启用 Cookie,所以最后我不得不同时更改服务器端和应用程序端的代码。我在 UserDefaults 中保存数据,通过在我的 WebView 上执行 javascript 并使用本机 Javascript 桥来回调我的网页来与网页通信。我不确定它对你有多大帮助。因为我可以控制服务器端代码,所以它对我有用。 另一个信息是我已经为这个问题提交了一个错误。苹果已经关闭了我的错误报告,说它是另一个错误报告的副本。所以,至少,这意味着苹果已经接受了这个错误,并希望他们能修复它。但天知道什么时候:) 由于这个 localStorage 问题(禁用 cookie 时),Youtube 视频无法在 UIWebView 中播放,并且如果其他站点使用 localStorage 并且您在应用中禁用了 Cookie,则它们无法正常工作。天知道,苹果什么时候会解决这个问题 我已停止使用 HTML5 LocalStorage。我将数据保存在文件中并通过 (UIWebView)native-Javascript 桥将其发送到网页。使用这种方法,您的服务器端代码也必须进行修改。但是对于第三方网站,在 Apple 解决此问题之前,我们无能为力。 【参考方案1】:试试:
window.localStorage
例如:
[webView loadHTMLString:@"<script>alert('hello world');alert(window.localStorage);</script>" baseURL:nil];
【讨论】:
【参考方案2】:当然这是一篇较旧的帖子,但fwiw ...
不确定我是否遇到过这个问题。在使用 iOS6/7 的多个项目中使用了带和不带 cookie 的 localStorage。
提供的 loadHTMLString 对我来说有点奇怪......所以我尝试了这个......
[webView stringByEvaluatingJavaScriptFromString:@"alert('hello world');alert(localStorage);"];
...效果很好,并按预期显示了 localStorage 对象,禁用了 cookie。
在 sim 和 iOS7 设备上测试。
【讨论】:
【参考方案3】:不确定这是否会有所帮助,但您可以在此处浏览博客-- http://transitionalreality.blogspot.in/2014/03/html-5-local-storage-with-ios-app.html
我已经以自己的方式实现了 HTML5 本地存储,这可能就是您正在寻找的。p>
【讨论】:
以上是关于iOS7 无法访问 HTML5 localStorage,如果 Cookies 被禁用的主要内容,如果未能解决你的问题,请参考以下文章
如果无法访问 UIWebView 的运行时,为啥要在 iOS7 中使用 JavaScriptCore?