swift WkWebView的返回,goback,跳过同级

本文介绍了在使用Swift的WKWebView时遇到的一个问题:由于同一页的不同tab也被记录在返回栈中,导致点击返回按钮会停留在同一页面。为了解决这个问题,文章提供了一个解决方案,通过比较返回页和当前页的URL相对路径,过滤掉相同的页面,确保正确的返回操作。代码示例展示了如何实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值