WKWebView里面修改UserAgent 最终方案。

480 阅读1分钟

有个需求是,项目要区分打开H5是在本地APP还是在手机浏览器,前端伙伴说需要配合修改默认的UserAgent,以便区分。约定一个默认的值加版本号

首先UIWebView方式已经不怎么用了,所以就不说了,直接说WKWebView

可以写在初始化的时候

- (**BOOL**)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

image.png

这个时候打印UserAgent去看 Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E230

注意这个方法是异步的 这个时候要是通过别的链接(Universal Links)在微信打开app 冷启动这个时候,WKWebView里面的UserAgent 还没有修改成功,就展示出来了,所以前端网页就没有办法展示出app的样式。第一次冷启动打开网页显示会没有,然后第二次打开的时候,才会UserAgent里面才会有对应的值

所以推荐

通过WKWebViewConfiguration的属性我们看到了applicationNameForUserAgent属性,支持ios9以上

WKWebViewConfiguration *webViewConfig = [[WKWebViewConfiguration alloc] init];
webViewConfig.allowsInlineMediaPlayback = YES;
NSString *userAgent = webViewConfig.applicationNameForUserAgent;
userAgent = [userAgent stringByAppendingString:@"myapp/1.0.0"];
webViewConfig.applicationNameForUserAgent = userAgent;
self = [super initWithFrame:frame configuration:webViewConfig];

最后测试打印出来的值 而h5获取到的UserAgent打印出来为完整的:Mozilla/5.0 (iPhone; CPU iPhone OS 9_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13E230/myapp/1.0.0

就完美的解决了。如果有问题,欢迎讨论