儘管是在寫 App,然而三不五時就會需要內嵌網頁,因為我們實在很懶(是這樣嗎?),不想要再自己重刻一個頁面~😜
廣告
除此之外,做 Web 端的同仁也想知道,這個網頁的執行是來自哪裡,他們通常會從 User Agent (用戶代理) 下手,此時就會請求我把一些資訊塞進 User Agent 。
這種做法其實相當簡單呢!現在 iOS 可藉由新的 WKWebView 來實現。
程式碼其實就是透過執行 Web Javascript 來替換 User Agent 內容~
- (void)configureWebViewUserAgent
{
// 獲取當前UserAgent,並進行修改
[webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id userAgent, NSError * _Nullable error) {
if ([userAgent isKindOfClass:[NSString class]]) {
// Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
userAgent = [NSString stringWithFormat:@"Mozilla/5.0 (%@; CPU iPhone OS %@ like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148", [[UIDevice currentDevice] model], [[[UIDevice currentDevice] systemVersion] stringByReplacingOccurrencesOfString:@"." withString:@"_"]];
}
// 自定義 User Agent
NSString *newAgent = userAgent;
newAgent = [NSString stringWithFormat:@"%@; (happyman-studio) App Version: %@", userAgent, [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]];
// 一定要設定 customUserAgent,否則執行 navigator.userAgent 拿不到 userAgent
self->webView.customUserAgent = newAgent;
NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
[[NSUserDefaults standardUserDefaults] synchronize];
}];
}
在有 WebView 的環境下,執行以上的程式碼,即可設定完成!
廣告
怎麼知道設定成功?再執行一次:
[webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id userAgent, NSError * _Nullable error) {
}];
其中 userAgent 就會返回:
Mozilla/5.0 (iPhone; CPU iPhone OS 13_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148; (happyman-studio) App Version: 1.0
有沒有看到 happyman-studio 呀?這可是我認證過的喔~
這樣 Web 端就能知道是從哪個平台呼叫該網頁,想要更詳細的平台環境資料,也能繼續加入喔!🥳
參考:
廣告
隨意留個言吧:)~