前言:
2020年12月底苹果将要全面废除UIWebView的使用,因此今年陆陆续续的将很多的旧的业务中使用的UIWebView进行替换修改,其中遇到了这样我们一个问题:我们项目里需要在所有的网络请求的Header里把浏览器的UA带上去,之前用到的是UIWebView,在一个全局变量懒加载中获取,现在要修改成WKWebView. 替换后发现WKWebView报错,查明原因是因为WKWebView的evaluateJavaScript不是在主线程执行,但是我们的业务需求是必须在主线程的节奏上获取ua.下面的是记录:
1.UIWebView获取UserAgent
通过StringByEvalutingJavaScript执行js代码来获取UA
2.WKWebView获取UserAgent
通过evaluateJavaScript来获取,但是这个方法是在异步线程执行的,如果不做任何处理的话,因为当前的webview很快会释放,因此就会报错:
Error Domain=WKErrorDomain Code=3 "The WKWebView was invalidated"
所以就要在结果返回前阻塞当前线程. 利用run(mode:RunLoop.Mode, before limitDate:Date)方法