WKWebView调用goBack返回时,页面不会刷新,那么对于页面需要登陆的情况就很容易出现BUG,从别的页面登陆了,返回时,当前页面还需要登陆,体验很是不好。
下面是我综合网上的思路,收集的两个解决方案,仅供参考。
方案一
在返回的同时,手动调用重新装填方法,如下:
[_webView goBack];
[_webView reload];
此方案有个缺陷:那就是前进和后退导航会出问题;
方案二(推荐)
通过注入一段JS,在页面返回的时候,触发JS重新加载页面链接,大致如下:
WKWebViewConfiguration *config = [WKWebViewConfiguration new];
WKUserContentController *userContentController = [WKUserContentController new];
WKUserScript *reloadScript = [[WKUserScript alloc] initWithSource:@"window.addEventListener('pageshow', function(event){if(event.persisted){location.reload();}});"
injectionTime:WKUserScriptInjectionTimeAtDocumentEnd
forMainFrameOnly:YES];
[userContentController addUserScript: reloadScript];
config.userContentController = userContentController;
这样当WKWebView后退的时候,就会触发JS的pageshow
方法,进而触发页面刷新。
总结
经测试,方案更完美一些。
网友评论