iOS 修改webkit默認(rèn) UserAgent

iOS 修改webKit 默認(rèn)的UserAgent??

轉(zhuǎn)載?2017年08月02日 15:41:05

資料:

有個(gè)項(xiàng)目需求订晌,要區(qū)分打開(kāi)H5是在本地APP還是在手機(jī)瀏覽器竖般,前端伙伴說(shuō)需要配合修改默認(rèn)的?UserAgent,以便區(qū)分版扩。

一甲葬、如何獲取UserAgent

UIWebView方式:

UIWebView*webView = [[UIWebViewalloc] initWithFrame:CGRectZero];NSString*userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];DLog(@"userAgent :%@", userAgent);

WKWebView方式:

// 注意這個(gè)方法是異步的WKWebView*wkWebView = [[WKWebViewalloc] initWithFrame:CGRectZero];[wkWebView evaluateJavaScript:@"navigator.userAgent"completionHandler:^(idresult,NSError*error) {? ? DLog(@"userAgent :%@", result); }];

默認(rèn)UserAgent輸出:

Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H143

微信 iOS版的 :UserAgent

mozilla/5.0 (iphone; cpu iphone os 5_1_1 like mac os x) applewebkit/534.46 (khtml, like gecko) mobile/9b206 micromessenger/5.0

其中micromessenger就是自定義的

二庭呜、如何修改UserAgent

方案一,修改全局UserAgent值(這里是在原有基礎(chǔ)上拼接自定義的字符串)

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

UIWebView*webView = [[UIWebViewalloc] initWithFrame:CGRectZero];NSString*userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];NSString*newUserAgent = [userAgent stringByAppendingString:@" native_iOS"];//自定義需要拼接的字符串NSDictionary*dictionary = [NSDictionarydictionaryWithObjectsAndKeys:newUserAgent,@"UserAgent",nil];? ? [[NSUserDefaultsstandardUserDefaults] registerDefaults:dictionary];

}

方案二钢颂,自定義UserAgent值

WKWebView*wkWebView = [[WKWebViewalloc] initWithFrame:self.view.bounds];[self.view addSubview: wkWebView];NSString*customUserAgent =@"native_iOS";[[NSUserDefaultsstandardUserDefaults] registerDefaults:@{@"UserAgent":customUserAgent}];NSURL*url = [NSURLURLWithString:self.strUrl];NSURLRequest*request = [NSURLRequestrequestWithURL:url? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:10.f];[self.wkWebView loadRequest:request];

方案三

self.wkWebView = [[WKWebViewalloc] initWithFrame:self.view.bounds]; __weaktypeof(self) weakSelf =self; [self.wkWebView evaluateJavaScript:@"navigator.userAgent"completionHandler:^(idresult,NSError*error) {? ? ? ? __strongtypeof(weakSelf) strongSelf = weakSelf;NSString*userAgent = result;NSString*newUserAgent = [userAgent stringByAppendingString:@" native_iOS"];NSDictionary*dictionary = [NSDictionarydictionaryWithObjectsAndKeys:newUserAgent,@"UserAgent",nil];? ? ? ? [[NSUserDefaultsstandardUserDefaults] registerDefaults:dictionary];// needs retain because `evaluateJavaScript:` is asynchronousstrongSelf.wkWebView = [[WKWebViewalloc] initWithFrame:strongSelf.view.bounds];? }];? [self.wkWebView loadRequest:request];

三钞它、問(wèn)題& 思考

在測(cè)試的時(shí)候,發(fā)現(xiàn)方案二殊鞭、三第一次運(yùn)行的時(shí)候遭垛,還是顯示默認(rèn)的值,第二次才會(huì)顯示自定義的值操灿,其中原因還不明锯仪,如有朋友解決麻煩告訴一下,謝謝牲尺。

問(wèn)題:實(shí)驗(yàn)的時(shí)候 工程中 只有方法一 是有效果的卵酪,方法二 三,沒(méi)有產(chǎn)生作用谤碳。希望知道的小伙伴 給出答案

四:補(bǔ)充:實(shí)際應(yīng)用

后期測(cè)試的時(shí)候 由于需求是根據(jù)請(qǐng)求后臺(tái)的接口溃卡,來(lái)判斷tabBarItem的個(gè)數(shù)和標(biāo)題,還有加載的界面數(shù)據(jù)(我的工程是混合開(kāi)發(fā)的蜒简,大部分是網(wǎng)頁(yè))瘸羡,后臺(tái)需要在我請(qǐng)求的時(shí)候,傳遞UA頭來(lái)判斷版本 和返回的數(shù)據(jù)搓茬。而我使用上述第一種方式犹赖,可以修改成功,但是第一次請(qǐng)求這個(gè)接口的時(shí)候會(huì)被AFN 內(nèi)部的UA 修改成默認(rèn)格式的卷仑,

我定義的格式:Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100 appName_ios_v2.0 appName_ios_v2.0

AFN請(qǐng)求之后峻村,后臺(tái)得到的格式:appName/2.0 (iPhone; iOS 11.2.6; Scale/2.00)

這樣 后臺(tái)得到的格式就和協(xié)商的格式不同了,然后經(jīng)過(guò)實(shí)驗(yàn)?zāi)匚褂昧薃FN 中的AFHTTPSessionManager 類進(jìn)行設(shè)置:

//重定義UA ? ? ? ?創(chuàng)建 一個(gè)?AFHTTPSessionManager 類對(duì)象_session

? ? ? ? NSString *currentVision = [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"];

? ? ? ? UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];

? ? ? ? NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];

? ? ? ? NSString *newUserAgent = [userAgent stringByAppendingString:@" yuntuiapp_ios_v"];

? ? ? ? newUserAgent = [newUserAgent stringByAppendingString:currentVision];

? ? ? ? NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];

? ? ? ? [[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];

? ? ? ? [[NSUserDefaults standardUserDefaults] synchronize];

?? ? ? ?[_session.requestSerializer setValue:newUserAgent forHTTPHeaderField:@"User-Agent"];

這樣設(shè)置的話粘昨,在每次請(qǐng)求的時(shí)候 都會(huì)設(shè)定UA ,當(dāng)然了,可能會(huì)有問(wèn)題张肾,但是具體的問(wèn)題后期遇到再補(bǔ)充芭析,暫時(shí)能滿足需求。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吞瞪,一起剝皮案震驚了整個(gè)濱河市馁启,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芍秆,老刑警劉巖惯疙,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異浪听,居然都是意外死亡螟碎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門迹栓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人俭缓,你說(shuō)我怎么就攤上這事克伊。” “怎么了华坦?”我有些...
    開(kāi)封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵愿吹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我惜姐,道長(zhǎng)犁跪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任歹袁,我火速辦了婚禮坷衍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘条舔。我一直安慰自己枫耳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布孟抗。 她就那樣靜靜地躺著迁杨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凄硼。 梳的紋絲不亂的頭發(fā)上铅协,一...
    開(kāi)封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音摊沉,去河邊找鬼狐史。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的预皇。 我是一名探鬼主播侈玄,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吟温!你這毒婦竟也來(lái)了序仙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鲁豪,失蹤者是張志新(化名)和其女友劉穎潘悼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體爬橡,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡治唤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糙申。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宾添。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖柜裸,靈堂內(nèi)的尸體忽然破棺而出缕陕,到底是詐尸還是另有隱情,我是刑警寧澤疙挺,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布扛邑,位于F島的核電站,受9級(jí)特大地震影響铐然,放射性物質(zhì)發(fā)生泄漏蔬崩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一搀暑、第九天 我趴在偏房一處隱蔽的房頂上張望沥阳。 院中可真熱鬧,春花似錦险掀、人聲如沸沪袭。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冈绊。三九已至,卻和暖如春埠啃,著一層夾襖步出監(jiān)牢的瞬間死宣,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工碴开, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毅该,地道東北人博秫。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像眶掌,于是被迫代替她去往敵國(guó)和親挡育。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容