先附上结论:
- WKWebView的customUserAgent会覆盖webview本身的userAgent;
- configuration.applicationNameForUserAgent设置的userAgent是拼接在webview本身的userAgent后面的。
正确设置自定义userAgent
WKWebViewConfiguration *configuration = [WKWebViewConfiguration new];
configuration.applicationNameForUserAgent = "iOS";
_webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration];
最近我的项目h5网页接入第三方视频直播(m3u8格式)和flash视频,出现不能播放的情况。
于是排查问题,怀疑两个地方:
- 由于h5网页需要注入对象,引入了XWebView;
- 又由于需要显示网页中的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
到这里一切就明了!