使用goBack时不会触发webViewDidFinishLoad

时间:2013-03-23 06:37:01

标签: ios uiwebview uiwebviewdelegate

我想在加载网页后做一些额外的工作,所以我在webViewDidFinished中添加了一些代码,但似乎在这种情况下它不起作用。

情况:我访问带有UIWebview的网页,然后点击指向另一个的链接,之后,我运行

[webview goback];

似乎页面是从缓存加载的,只是

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

被称为

- (void)webViewDidFinishLoad:(UIWebView *)webView;

未被调用。

2 个答案:

答案 0 :(得分:5)

真。还有一种方法可以了解历史堆栈的变化:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(webViewHistoryDidChange:)
                                             name:@"WebHistoryItemChangedNotification"
                                           object:nil];

由于UIWebView canGoBack上的{{1}}不符合KVO,因此这似乎是启用/禁用潜在后退按钮的唯一方法。

答案 1 :(得分:0)

然而古怪,我怀疑这是正确的行为。来自Apple doc:

  

webViewDidFinishLoad:

     

在网络视图完成加载框架后发送。

我敢打赌,UIWebView缓存了一定数量的页面,而goBackgoForward方法并不能保证重新加载存储在后向列表中的位置。因此不会触发webViewDidFinishLoad

但即使这可能是正确的行为,我当然会同意这是糟糕的API设计。肯定有一个finishLoad - ish方法可以用于后退/前进/页内导航。