我有同樣的問題。我試圖管理歷史,但它很容易出錯。現在我發現了一個更好的解決方案。
你想要做的只是添加一個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];
代碼來處理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時彈出堆棧。
我會爭辯說''loadHtmlString:'對所有人來說都是不好的做法,除了最簡單的用例。您應該考慮運行本地Web服務器。我用[CocoaHTTPServer](https://github.com/robbiehanson/CocoaHTTPServer)和[Mustache模板](https://github.com/groue/GRMustache)取得了成功。如果您可以使用HTML/JavaScript編寫整個應用程序,請考慮使用[Trigger.io](https://trigger.io/)或類似軟件。 –
我的用例很簡單。簡單地將靜態頁面作爲格式書籍的一部分。 – Felix
靜態頁面?太棒了,把它們保存到你的包中,並使用我在這裏描述的技術http://stackoverflow.com/a/17557309/354144 –