如何在iPhone上的UIWebview中清除后退列表?

zsn*_*erx 12 iphone clear uiwebview ipad

我想访问/清除后退列表,就好像它UIWebView是新的一样.是否有任何公共API或解决方法来执行此操作?

我试过了:

while ([webview canGoback]) {
    [webview goBack];
}
Run Code Online (Sandbox Code Playgroud)

但这会冻结设备(模拟器).

Sam*_*cam 18

免责声明
与此类似的情况一样,请记住,结果可能无法通过应用商店批准,并且可能无法在将来修订SDK时使用.


SDK中没有官方方法可以执行此操作.但是,如果你真的想要清除它的后退/前进历史,UIWebView可以通过对私有框架的一点研究来完成.

一个快速而肮脏的方法(完成一堆丑陋的编译器警告)如下:

鉴于这myUIWebViewInstance是一个完全正常的例子UIWebView:

id internalWebView=[[myUIWebViewInstance _documentView] webView];       
[internalWebView setMaintainsBackForwardList:NO];
[internalWebView setMaintainsBackForwardList:YES];
Run Code Online (Sandbox Code Playgroud)

_clearBackForwardCache在框架中也有一个相当诱人的方法,但是当它发痒时似乎并没有做太多.只是翻转boolian对我来说是一种享受.

  • 毫无疑问,我今天被拒绝使用这个确切的代码. (9认同)
  • Apple刚刚拒绝了我的一个使用此私有框架的应用程序. (5认同)

Gil*_*ert 13

如果您正在尝试"重用"现有的UIWebView,并且无法返回之前的任何页面,您可以:

  1. 加载新请求(用户不应该返回的请求)时,请保存新请求的URL,例如:

    self.curURL = [NSURL urlWithString:@"http://www.bla.com"];
    [webview loadRequest:[NSURLRequest requestWithURL:curURL]];

  2. 我猜你有自己的后退按钮,所以在你的webViewDidFinishLoad委托方法中,添加:

    backbttn.enabled = webView.canGoBack && ![[webView.request URL] isEqual: curURL];

这样,用户甚至不知道UIWebView可以回到之前的页面.


小智 6

只需重新创建webview.它会重置一切,包括历史.


Mic*_*iel 5

我使用以下代码行成功(就你可以称之为'成功'的解决方法而言):

[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"if( window.history.length > 1 ) { window.history.go( -( window.history.length - 1 ) ) }; window.setTimeout( \"window.location.replace( '%@' )\", 300 );", targetLocation]];
Run Code Online (Sandbox Code Playgroud)

targetLocation所需的URL 在哪里NSString.

它的作用是告诉浏览器在历史记录过程中向后移动,然后在短暂超时后加载所需的URL.

这当然不能解决清除前进历史的问题(在我的情况下我不需要).