You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 10:59:59