xiubojin / JXBWKWebView

An component WebView for iOS base on WKWebView
MIT License
736 stars 115 forks source link

webview复用问题 #67

Closed jhz-libowen closed 4 years ago

jhz-libowen commented 4 years ago

getReusedWebViewForHolder 方法获取webview的时候有可能会获取一个没有清空的webview,效果就是打开第一个页面马上关闭打开第二个页面会出现第一个页面的遗留页面,然后再出现第二个页面。

一般连续打开不同的页面会出现。

目前我想到的解决办法是在webViewEndReuse方法里[self loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]清空页面

问下作者kwebkit://reuse-webView这个是源码里用来清空页面的,我没搜到相关内容

jhz-libowen commented 4 years ago

问下kwebkit://reuse-webView 是什么链接

jhz-libowen commented 4 years ago

我改了下getReusedWebViewForHolder ,作者看下有没有问题

- (__kindof LKWKWebView *)getReusedWebViewForHolder:(id)holder{
    if (!holder) {
        #if DEBUG
        NSLog(@"MSWKWebViewPool must have a holder");
        #endif
        return nil;
    }

    [self _tryCompactWeakHolders];

    LKWKWebView *webView;

    dispatch_semaphore_wait(_lock, DISPATCH_TIME_FOREVER);

    if (_reusableWebViewSet.count > 0) {
        webView = (LKWKWebView *)[_reusableWebViewSet anyObject];
        if (webView.isLoading) {

            [webView stopLoading];
            [_reusableWebViewSet removeObject:webView];
            webView = nil;

            [_visiableWebViewSet removeAllObjects];
            webView = [[LKWKWebView alloc] initWithFrame:CGRectZero configuration:[self webViewConfiguration]];
            [_visiableWebViewSet addObject:webView];
        }else {
            [_reusableWebViewSet removeObject:webView];
            [_visiableWebViewSet addObject:webView];

            [webView webViewWillReuse];
        }

    } else {
        [_visiableWebViewSet removeAllObjects];
        webView = [[LKWKWebView alloc] initWithFrame:CGRectZero configuration:[self webViewConfiguration]];
        [_visiableWebViewSet addObject:webView];
    }
    webView.holderObject = holder;

    dispatch_semaphore_signal(_lock);

    [webView lk_syncCustomUserAgentWithType:(CustomUserAgentTypeAppend) customUserAgent:@"WKWebView"];

    //1.桥接
    [[LKWebViewJSBridgeManager shared] configBridgeWithWebView:webView];

    return webView;
}
xiubojin commented 4 years ago

这里正在优化,最近会发布新版本。

xiubojin commented 4 years ago

发布新版本了。