使用goBack时不会触发webViewDidFinishLoad

jes*_*ang 4 uiwebview ios uiwebviewdelegate

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

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

[webview goback];
Run Code Online (Sandbox Code Playgroud)

似乎页面仅从缓存加载

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
Run Code Online (Sandbox Code Playgroud)

叫做,

- (void)webViewDidFinishLoad:(UIWebView *)webView;
Run Code Online (Sandbox Code Playgroud)

不叫.

sti*_*igi 5

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

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(webViewHistoryDidChange:)
                                             name:@"WebHistoryItemChangedNotification"
                                           object:nil];
Run Code Online (Sandbox Code Playgroud)

由于UIWebView不符合KVO,canGoBack这似乎是启用/禁用潜在后退按钮的唯一方法.


tho*_*max 1

不管多么奇怪,我怀疑这是正确的行为。来自苹果文档:

webViewDidFinishLoad:

Web 视图完成加载框架后发送。

我敢打赌,UIWebView 缓存一定数量的页面,并且goBackgoForward方法不能保证存储在后退列表中的位置被重新加载。因而不火webViewDidFinishLoad

但即使这可能是正确的行为,我也肯​​定同意这是糟糕的 API 设计。肯定应该有一个finishLoad-ish 方法来挂钩后退/前进/页内导航。