WKWebView白屏原因的坑

錯(cuò)誤日志:

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

白屏場(chǎng)景:

第一:使用WKWebView調(diào)用H5微信支付;

第二:這樣要呼起微信,在微信支付界面,點(diǎn)擊取消支付;

第三:這個(gè)時(shí)候回到WKWebView的h5界面,刷新結(jié)果頁(yè)面,此頁(yè)面有重新支付按鈕,

第四:多次重復(fù)前面步驟,出現(xiàn)了白屏,日志出現(xiàn)了上述錯(cuò)誤,通過對(duì)比發(fā)現(xiàn)WKCompositingView不見了;前后臺(tái)切換后,界面又能正常顯示出來,很是奇怪,如下圖:左邊是白屏,右邊是正常。

注意:多次呼起第三方微信App出現(xiàn)的現(xiàn)象,在App多次打開多個(gè)H5頁(yè)面暫未發(fā)現(xiàn)白屏現(xiàn)象;



解決方案

在viewDidAppear回調(diào)進(jìn)行遍歷WKWebView的subviews,查找WKCompositingView是否存在來判斷是否白屏;出現(xiàn)白屏可以關(guān)閉頁(yè)面或者重新構(gòu)造WKWebView頁(yè)面,經(jīng)過測(cè)試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;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容