iPhone UIWebView loadHtmlString未添加到历史记录中

Fel*_*lix 8 iphone back uiwebview ios

UIWebview使用loadHtmlString加载本地html文件.加载的页面包含指向其他本地html文件的链接以及使用互联网的真实链接.

我添加了一个后退按钮:

if([self.webView canGoBack])[self.webView goBack];

这工作正常,除了它不能识别加载loadHtmlString的原始页面.

例如,如果我导航:
local - > local - > web
local X local < - web(第一个返回工作,下一个什么都不做.)

如何让webview识别原始页面,以便后退按钮也适用于它?我能以某种方式将它添加到webview的历史中吗?

提前致谢!

Clo*_* Xu 9

我遇到了同样的问题.我试过管理历史,但它容易出错.现在我发现了一个更好的解决方案.

你想要做的只是将loadRequest添加到about:blank并在调用loadHTMLString/loadData之前将其作为占位符.然后你完全没有监视历史.webview.canGoBack和canGoForward将会正常工作.当然,你需要一个黑客来处理回到占位符:空白.您可以在webViewDidFinishLoad中执行此操作.这是代码亮点:

在调用loadHTMLString时的函数中:

[weakSelf.fbWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
[weakSelf.fbWebView loadHTMLString:stringResponse baseURL:url];
Run Code Online (Sandbox Code Playgroud)

处理goBack的代码:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
  if ([webView.request.URL.absoluteString isEqualToString:@"about:blank"]
      && ![webView canGoBack] && [webView canGoForward]) {
    [weakSelf.fbWebView loadHTMLString:stringResponse baseURL:url];
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为也可以扩展此解决方案来处理那些不是第一次加载的loadHTMLString.只需通过堆栈来记录所有字符串响应并在每个loadHTMLString上插入about:blank.每次回到about:blank时弹出堆栈.


Nos*_*vel 5

正如Cloud Xu所说,您只需要预加载 dummy html,如下所示:

    webView.load(URLRequest(url: URL(string: "about:blank")!))
    webView.loadHTMLString("<html><body><b>Your page data</b></body></html>", baseURL: nil)
Run Code Online (Sandbox Code Playgroud)

只是它,没有别的!斯威夫特3