游戏SDK

WKWebView主线程获取UserAgent-Swift

2020-06-10  本文已影响0人  热望与美梦

前言:

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

上一篇 下一篇

猜你喜欢

热点阅读