从缓存中goBack后不调用UIWebView shouldStartLoadWithRequest

时间:2013-09-10 08:53:49

标签: ios caching uiwebview

我使用以下代码初始化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。

2 个答案:

答案 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];
}