为什么iOS7中的UIWebView canGoBack = NO?

前端之家收集整理的这篇文章主要介绍了为什么iOS7中的UIWebView canGoBack = NO?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我将这个网站嵌入我的应用程序:
NSString *url = [NSString stringWithFormat:@"https://mobile.twitter.com/search?q=%@",@"@test OR #test"];
url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[self.twitterWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];

self.twitterWebView.scalesPageToFit = YES;

我在这个网站上有两个按钮可以前往后退.我在打电话

[self.twitterWebView goBack];和
[self.twitterWebView goForward];因此.

这在iOS 6上可以正常工作,但在iOS 7上,我的网络视图的canGoBack和canGoForward属性都不是,因此我的后退和前进按钮不起作用.

作为附注,当应用程序第一次安装并且页面第一次加载时,我的按钮工作.但是当我再次运行我的应用程序,当我点击网站上的链接时,我的网络视图的canGoBack属性始终返回NO.

我该如何解决

编辑:我上传了一个显示我的问题的小测试应用程序.您可以从here下载.请在iOS 7模拟器上运行应用程序,看到后退按钮正在首次安装应用程序.然后退出,再次运行应用程序,您会看到它将停止工作.

顺便说一句,问题似乎是关于Twitter的移动网站.您可以尝试另一个网站地址,看看.

解决方法

这似乎与 HTML5’s “Application Cache” functionality有关.首次启动时,该站点不被缓存,并且UIWebView正确地检测到它是可以向前还是向后.一旦缓存被填充,新的UIWebView实例决定,即使URL改变(可以在UIWebViewDelegate的 webView:shouldStartLoadWithRequest:navigationType:中观察到),向前或向后是不可能的. canGoForward和canGoBack将返回NO和goForward,goBack不会做任何事情.只要这个特定网站的HTML5缓存存在,这个应用程序的重新启动就会持续存在.

也许这个问题仅限于通过JavaScript修改URL的Fragment identifier after the hashmark的网络应用程序.
是的,UIWebView在这种情况下的行为DID在iOS 6和iOS 7之间变化.

我还没有找到解决方案,我们可能要等待苹果在iOS 7.1中修复这个问题.

编辑

其他人也有这个问题:

If you are using Application Cache and also managing
states through hash or other technique,the history object will not
keep your navigation history,therefore history.back() will never work
and history.length stays in 1 forever.

(http://www.mobilexweb.com/blog/safari-ios7-html5-problems-apis-review)

编辑2

Safari 7.0中存在此问题(9537.71,默认为OS X 10.9 Mavericks).但是,最近的WebKit nightly build(r158339)似乎工作正常.这很可能只是一个时间问题,直到修复使它成为iOS和OS X版本.

编辑3

iOS 7.1和OS X 10.9.2中仍然存在此问题.

编辑4

这个bug已经在iOS 8和Safari 7.1(9537.85.10.17.1)中针对OS X修复了!

有关:

> history object doesn’t keep navigation history ios7 safari

猜你在找的iOS相关文章