我正在实施一个小型浏览器,所以我希望能够在我的网络视图中前后导航。出于这些目的,我使用WKWebView,但有时我需要显示一个Error html页面,我不希望这个页面存储在我的WKBackForwardList中。
有没有办法从WKBackForwardList中删除一个项目? 我想这是一个非常普遍的问题,那么,我是否必须实现自己的历史功能?
答案 0 :(得分:2)
现在很清楚WKBackForwardList是不可变的(例如,无法修改)。 但是你可以通过搞乱本地网络服务器来实现这个结果。 您创建一个错误页面,由本地Web服务器提供,并在出现错误时将其加载到webview中。但是本地Web服务器的行为是这样的,它会加载错误页面一次,所有其他请求(从后退和前进)将导致重定向到导致错误的页面。 BackFrowardList不会在序列中存储url地址的重复项,因此此页面URL只会出现一次。 看看Firefox iOS version implementation,因为他们使用完全相同的技术。
在历史记录部分,如果您只想在一个会话期间保留历史记录,则可以真正使用BackForwardList项目。但是如果你想在会话之间保持历史(WKWebView破坏),那么你必须创建自己的历史存储。
答案 1 :(得分:0)
据我所知
func loadHTMLString(_ string: String,
baseURL baseURL: NSURL?) -> WKNavigation?
选择向列表添加内容,canGoBack和canGoForward返回false,因此错误页面可以添加为字符串。