我使用以下代码初始化WebView:
self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
self.webView.delegate =self;
[self.view addSubview:self.webView];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];
然后我在WebView中加载一个网页。例如,搜索stackoverflow。
比按下按钮调用goBack
[self.webView goBack];
每次都不会调用此委托方法。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
我假设goBack函数从缓存加载页面,因为它加载速度非常快。
在iOS版本6.1上发生。
任何人都可以帮助我,代表将永远被召唤?
更新: 我使用shouldStartLoadWithRequest:navigationType:delegate方法来获取历史记录返回的URL。
答案 0 :(得分:3)
更好的方法是收听webHistory更改通知以检测goBack / goForward操作。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(webViewHistoryDidChange:)
name:@"WebHistoryItemChangedNotification"
object:nil];
答案 1 :(得分:1)
Web视图goBack委托方法加载后向列表中的上一个位置。它会按照您的假设直接从缓存加载页面。如果您希望每次goback都需要刷新Web视图,则需要自定义此功能。 (例如:在返回后手动调用委托方法或功能实现以重新加载同一页面。)
- (IBAction)goBackAction:(UIButton *)sender {
[self.webView goBack];
[self webView:self.webView shouldStartLoadWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.stackoverflow.com"]] navigationType:UIWebViewNavigationTypeOther];
}