WKWebView主线程获取UserAgent-Swift

前言:

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)方法

你可能感兴趣的:(WKWebView主线程获取UserAgent-Swift)