WKWebView白屏原因的坑

错误日志:

Could not signal service com.apple.WebKit.WebContent: 113: Could not find specified service

白屏场景:

第一:使用WKWebView调用H5微信支付;

第二:这样要呼起微信,在微信支付界面,点击取消支付;

第三:这个时候回到WKWebView的h5界面,刷新结果页面,此页面有重新支付按钮,

第四:多次重复前面步骤,出现了白屏,日志出现了上述错误,通过对比发现WKCompositingView不见了;前后台切换后,界面又能正常显示出来,很是奇怪,如下图:左边是白屏,右边是正常。

注意:多次呼起第三方微信App出现的现象,在App多次打开多个H5页面暂未发现白屏现象;



解决方案

在viewDidAppear回调进行遍历WKWebView的subviews,查找WKCompositingView是否存在来判断是否白屏;出现白屏可以关闭页面或者重新构造WKWebView页面,经过测试reload,loadRequest没有效果;


- (void)viewDidAppear:(BOOL)animated

{

    [super viewDidAppear:animated];

    BOOL isblank = [self isBlankView:self.webView];

    if (isblank)

        {

            [self performSelector:@selector(dismissViewController) withObject:nil afterDelay:0.1];

        }

}


- (void)dismissViewController
{
    [self.navigationController popViewControllerAnimated:YES];
}


/*
 * 判断是否白屏(WKCompositingView不存在)
 * YES:blank
 */
- (BOOL)isBlankView:(UIView*)view
{
    //NSLog(@"root:%@", NSStringFromClass(view.class));
    Class wkCompositingView = NSClassFromString(@"WKCompositingView");
    if ([view isKindOfClass:[wkCompositingView class]])
    {
        return NO;
    }
    for (UIView *subView in view.subviews)
    {
        //NSLog(@"child:%@", NSStringFromClass(subView.class));
        if (![self isBlankView:subView])
        {
            return NO;
        }
    }
    return YES;
}

你可能感兴趣的:(WKWebView白屏原因的坑)