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对我来说是一种享受.
Gil*_*ert 13
如果您正在尝试"重用"现有的UIWebView,并且无法返回之前的任何页面,您可以:
加载新请求(用户不应该返回的请求)时,请保存新请求的URL,例如:
self.curURL = [NSURL urlWithString:@"http://www.bla.com"];
[webview loadRequest:[NSURLRequest requestWithURL:curURL]];
我猜你有自己的后退按钮,所以在你的webViewDidFinishLoad委托方法中,添加:
backbttn.enabled = webView.canGoBack && ![[webView.request URL] isEqual: curURL];
这样,用户甚至不知道UIWebView可以回到之前的页面.
我使用以下代码行成功(就你可以称之为'成功'的解决方法而言):
[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.
这当然不能解决清除前进历史的问题(在我的情况下我不需要).