如何在WKWebView历史记录中找到起始点

时间:2016-06-06 07:04:49

标签: ios objective-c xcode swift wkwebview

我试图找到一种方法在WKWebView历史记录中向后跳转到起点。

我们说我有一个Main / Start-Page(WKWebView init),其中包含指向google.com的链接。

所以,我点击链接,然后点击 google.com ,点击其他链接 maps.google.com 。所以我离开始页面只有两步之遥。

如何直接跳回Main / Startpage而无需重新加载或重新启动WKWebView

我尝试过以下实施,但没有成功:

-(void)backNavigationToStart{
    if([vuMain canGoBack]){
        WKBackForwardList *list = [vuMain backForwardList];
        if(list && list.backList){
            WKBackForwardListItem *item = [list itemAtIndex:0];
            [vuMain goToBackForwardListItem:item];
        }
    }
}

3 个答案:

答案 0 :(得分:4)

注意-itemAtIndex的索引参数的含义:

“所需列表项目相对于当前项目的索引:当前项目为0,前一项目为-1,后续项目为1,依此类推。”https://developer.apple.com/library/ios/documentation/WebKit/Reference/WKBackForwardList_Ref/index.html#//apple_ref/occ/instm/WKBackForwardList/itemAtIndex:

使用适当的否定索引,或使用backList中的第一项。

答案 1 :(得分:2)

您可以使用JavaScript导航到浏览器历史记录中的第一项。

extension WKWebView {
    func goBackToFirstItemInHistory() {
        let script = "window.history.go(-(window.history.length - 1));"
        evaluateJavaScript(script) { (_, error) in
            print(error)
        }
    }
}

答案 2 :(得分:1)

纯快速解决方案:

    // find first item in history
    let historySize = webView.backForwardList.backList.count
    let firstItem = webView.backForwardList.item(at: -historySize)

    // go to it!
    webView.go(to: firstItem!)