iOS17+Xcode15下UIWebView无法通过NSUserDefaults自定义UserAgent求助
在iOS 17中自定义UIWebView的UserAgent
iOS 17对UIWebView的UserAgent(UA)读取机制进行了调整,原通过NSUserDefaults的registerDefaults方法设置UserAgent键的方式不再生效。以下是针对iOS 17适配的UIWebView自定义UA方案:
可行方案:修改WebKit相关默认配置
通过获取UIWebView的默认UA,拼接或替换为自定义内容后存入NSUserDefaults的WebKitUserAgent键,需确保在UIWebView初始化前执行该操作:
方式1:基于默认UA拼接自定义内容
// 创建临时WebView获取默认UA UIWebView *tempWebView = [[UIWebView alloc] initWithFrame:CGRectZero]; NSString *defaultUserAgent = [tempWebView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; // 拼接自定义标识 NSString *customUserAgent = [defaultUserAgent stringByAppendingString:@" test user agent"]; // 存入配置并同步 NSDictionary *uaDict = @{@"WebKitUserAgent": customUserAgent}; [[NSUserDefaults standardUserDefaults] registerDefaults:uaDict]; [[NSUserDefaults standardUserDefaults] synchronize];
方式2:完全自定义UA
NSString *customUserAgent = @"test user agent"; NSDictionary *uaDict = @{@"WebKitUserAgent": customUserAgent}; [[NSUserDefaults standardUserDefaults] registerDefaults:uaDict]; [[NSUserDefaults standardUserDefaults] synchronize];
多版本兼容逻辑
iOS 16及以下版本仍可沿用原UserAgent键的设置方式,可通过系统版本判断实现兼容:
NSString *customUserAgent = @"test user agent"; NSDictionary *uaDict; if (@available(iOS 17.0, *)) { uaDict = @{@"WebKitUserAgent": customUserAgent}; } else { uaDict = @{@"UserAgent": customUserAgent}; } [[NSUserDefaults standardUserDefaults] registerDefaults:uaDict]; [[NSUserDefaults standardUserDefaults] synchronize];
补充说明
苹果已在iOS 12起弃用UIWebView,长期来看建议迁移至WKWebView,通过customUserAgent属性可更便捷地设置UA:
webView.customUserAgent = @"test user agent";
内容的提问来源于stack exchange,提问作者lxxyeon
相关产品推荐
相关产品推荐

