我有同样的问题。我尝试管理历史记录,但很容易出错。现在我发现了一个更好的解决方案。
您要做的只是在调用 loadHTMLString/loadData 之前将 loadRequest 添加到 about:blank 并将其作为占位符。然后你就完全不用监控历史了。webview.canGoBack 和 canGoForward 将正常工作。当然,您将需要一个 hack 来处理返回占位符 about:blank。您可以在 webViewDidFinishLoad 中执行此操作。这是代码亮点:
在调用 loadHTMLString 时的函数中:
[weakSelf.fbWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
[weakSelf.fbWebView loadHTMLString:stringResponse baseURL:url];
处理 goBack 的代码:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if ([webView.request.URL.absoluteString isEqualToString:@"about:blank"]
&& ![webView canGoBack] && [webView canGoForward]) {
[weakSelf.fbWebView loadHTMLString:stringResponse baseURL:url];
}
}
我认为也可以扩展这个解决方案来处理那些不是第一次加载的 loadHTMLString。只需让 Stack 记录所有字符串响应并在每个 loadHTMLString 上插入 about:blank 即可。并在每次返回 about:blank 时弹出堆栈。