WKWebView遇到_blank的处理方法

在做WKWebView加载的时候,有时候,会发现一个超链接加载不了,或者对应的点击事件,执行不行,实际上跟target='_blank'有着莫大的关系。target='_blank'在HTML中,意味着新创建一个window窗口加载,也就是,不再是mainframe了。但是在UIWebView中,只有一个页面,所以,UIWebView会自动的在当前页面渲染新的链接内容。

解决思路有两个。

一) 在发起请求的时候根据发起请求的类型,进行处理,可以强制加载到一个一个WKWebView中去。

//在发起请求之前 决定跳转

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
    switch (navigationAction.navigationType) {
        case WKNavigationTypeLinkActivated:
            //超链接
            [webView loadRequest:navigationAction.request];
            break;
                    default:
            break;
    }
    decisionHandler(WKNavigationActionPolicyAllow);
}

WKNavigationAction中,有两个属性,sourceFrame和targetFrame,sourceFrame代表着原有加载链接的属性,targetFrame是代表着即将加载的链接的属性,其中都是属于WKFrameInfo的类型,可以通过isMainFrame,判断是在主窗口加载的,还是需要新创建一个窗口加载。

二)点击新创建一个window窗口的时候,会走UIDelegate的方法。但是,如果你没有设置UIDelegate的代理,以及实现createWebViewWithConfiguration方法,WKWebView将会什么都不做。

- (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures{
//判断即将加载的 链接是不是在主窗口 显示的,如果不是 直接在当前的主窗口中加载 
    if (!navigationAction.targetFrame.isMainFrame) {
        [webView loadRequest:navigationAction.request];
    }
    return nil;
}

参考学习文章https://www.jianshu.com/p/3a75d7348843

但是,这两种方法解决了跳转的问题,却带来了页面无法正常返回的问题,尚待解决。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值