公司运营用第三方开发了一个广告引导页,最后一页有个按钮,点击跳转我司的一个页面。但是微网站、android点击都能跳转,唯独iOS app不行,试着用Safari打开该引导页,发现点击可以跳转,但是新开了一个窗口进行的跳转,怀疑app里不能跳转跟这个有关。有问题,Google一下:
找到原因:
<a href = "xxx" target = "_blank">
_blank
是开一个新的页面打开网页,但是在项目中并没有支持新开页面。
在我们的项目实际需求中,并不需要新开一个窗口,所以当截获这种请求时,无需新开窗口,直接在当前页面加载该请求即可:
-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
//如果是跳转一个新页面
if (navigationAction.targetFrame == nil) {
[webView loadRequest:navigationAction.request];
}
decisionHandler(WKNavigationActionPolicyAllow);
}
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
WKFrameInfo *frameInfo = navigationAction.targetFrame;
if (![frameInfo isMainFrame]) {
[webView loadRequest:navigationAction.request];
}
return nil;
}
PS:实际在我们项目中,调试时我并未在网页中找到_blank
标签,但点击确实会触发createWebViewWithConfiguration
回调。
参考文章:
iOS WKWebView 加载网页 点击link不会跳转的解决方案
这篇文章有提到一个移除“_blank”标签的方案,我觉得思路也很好,不过在我的项目里不适用(点击跳转按钮没有触发该回调)
WKWebView遇到_blank的处理方法