为什么iOS7中的UIWebView canGoBack = NO?

asl*_*nci 13 objective-c uiwebview mobile-website ios ios7

我将这个网站嵌入到我的应用程序中,如下所示:

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;
Run Code Online (Sandbox Code Playgroud)

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

[self.twitterWebView goBack];
[self.twitterWebView goForward];相应.

这在iOS 6上工作正常,但在iOS 7上,我的web视图的canGoBack和canGoForward属性为NO,因此我的后退和前进按钮不起作用.

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

我怎么解决这个问题?

编辑:我上传了一个迷你测试应用程序来演示我的问题.你可以从这里下载.请在iOS 7模拟器上运行该应用程序,看到后退按钮正在处理应用程序的首次安装.然后退出,再次运行应用程序,你会发现它将停止工作.

顺便说一下,这个问题似乎与推特移动网站有关.您可以尝试其他网站地址并查看.

And*_*Ley 18

这似乎与HTML5的"应用程序缓存"功能有关.首次启动时,该站点不会被缓存,并且UIWebView可以正确检测它是否可以前进或后退.一旦缓存被填充,新UIWebView实例就会决定,即使URL发生变化(可以在UIWebViewDelegates中观察到webView:shouldStartLoadWithRequest:navigationType:),也不可能继续前进或后退.canGoForward并且canGoBack将返回NO,并goForwardgoBack不会做任何事情.只要此特定站点的HTML5缓存存在,这将在应用程序重新启动时持续存在.

也许这个问题仅限于通过JavaScript 在hashmark之后修改URL的Fragment标识符的 Web应用程序.是的,UIWebView这种情况下的行为DID在iOS 6和iOS 7之间发生了变化.

我还没有找到解决方案,我们可能不得不等待Apple在iOS 7.1左右修复此问题.

编辑

其他人也有这个问题:

如果您正在使用应用程序缓存并通过哈希或其他技术管理状态,则历史记录对象将不会保留您的导航历史记录,因此history.back()将永远不会起作用,并且history.length将永远保留在1中.

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

编辑2

Safari 7.0(9537.71,OS X 10.9 Mavericks中的默认值)中也存在此问题.但是,最新的WebKit每晚构建(r158339)似乎正常工作.在将修复程序发布到iOS和OS X版本之前,这很可能只是时间问题.

编辑3

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

编辑4

对于OS X,已在iOS 8和Safari 7.1(9537.85.10.17.1)中修复此错误!

有关: