我想在加载网页后做一些额外的工作,所以我在webViewDidFinished中添加了一些代码,但似乎在这种情况下它不起作用。
情况:我访问带有UIWebview的网页,然后点击指向另一个的链接,之后,我运行
[webview goback];
似乎页面是从缓存加载的,只是
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
被称为
- (void)webViewDidFinishLoad:(UIWebView *)webView;
未被调用。
答案 0 :(得分:5)
真。还有一种方法可以了解历史堆栈的变化:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(webViewHistoryDidChange:)
name:@"WebHistoryItemChangedNotification"
object:nil];
由于UIWebView
canGoBack
上的{{1}}不符合KVO,因此这似乎是启用/禁用潜在后退按钮的唯一方法。
答案 1 :(得分:0)
然而古怪,我怀疑这是正确的行为。来自Apple doc:
webViewDidFinishLoad:
在网络视图完成加载框架后发送。
我敢打赌,UIWebView缓存了一定数量的页面,而goBack
和goForward
方法并不能保证重新加载存储在后向列表中的位置。因此不会触发webViewDidFinishLoad
。
但即使这可能是正确的行为,我当然会同意这是糟糕的API设计。肯定有一个finishLoad
- ish方法可以用于后退/前进/页内导航。