踩坑WKWebView设置自定义UserAgent

先附上结论:

  1. WKWebView的customUserAgent会覆盖webview本身的userAgent;
  2. configuration.applicationNameForUserAgent设置的userAgent是拼接在webview本身的userAgent后面的。
正确设置自定义userAgent
WKWebViewConfiguration *configuration = [WKWebViewConfiguration new];
configuration.applicationNameForUserAgent = "iOS";
_webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];

最近我的项目h5网页接入第三方视频直播(m3u8格式)和flash视频,出现不能播放的情况。

于是排查问题,怀疑两个地方:

  1. 由于h5网页需要注入对象,引入了XWebView;
  2. 又由于需要显示网页中的webp图片,对WKWebView进行了请求拦截.

出现这个问题我首先想到的,是不是拦截请求无法处理直播流,先注释掉请求拦截的代码,测试还是不能播。

再想想会不会是注入对象时交换了一些函数引起的,于是又注释掉注入对象的代码,测试还是不能播。

咋办呢?直播链接用safari、微信、qq都能打开,为啥我的app就打不开呢?

灵光一现,会不会是userAgent的关系?

先不设置userAgent试试看能播不,嘿!能播,还真是这里的问题。

测试

WKWebViewConfiguration *configuration = [WKWebViewConfiguration new];
configuration.applicationNameForUserAgent = "iOS_App";
_webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];

如上设置userAgent抓包得到的内容是:

Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) iOS_App

_webView.customUserAgent = "iOS_App";

这种方式设置userAgent抓包后就只有iOS_App

到这里一切就明了!

你可能感兴趣的:(踩坑WKWebView设置自定义UserAgent)