swift WkWebView的返回,goback,跳过同级
在使用wkwebview的时候,需要增加顶部的返回图标,可以直接调用gaback函数,但是在web页中,同一页的不同tab也会被压入返回的backForwardList.backlist中,所以导致点击返回图标会停留在同一页面。针对这个bug的解决方法如下。
@objc private func onBack(sender: UIBarButtonItem) {
guard let webview = wkWebView else { return }
if(webview.canGoBack) {
var backlist = webview.backForwardList.backList // 获得存储的栈
var lastItem = backlist.popLast()
let currentItem = webview.backForwardList.currentItem
while(lastItem?.url.relativePath == currentItem?.url.relativePath) { // 比较返回页和当前页的url的realtive部分,相同的话就不断的弹出栈
lastItem = backlist.popLast()
}
if let lastitem = lastItem {
webview.go(to: lastitem) // 调用go函数,直接调转到要返回的web页
backlist.popLast() // 因为上面调用了go函数,backlist中会增加此次web跳转,所以弹出此次跳转
} else {
navigationController?.popViewController(animated: true)
}
} else {
navigationController?.popViewController(animated: true)
}
}