42- WKWebView項(xiàng)目實(shí)踐分享(七) - 補(bǔ)充: 實(shí)踐中的坑

系列文章:

第一坑: WKProcessPool

知識(shí)點(diǎn)復(fù)習(xí):

看過騰訊Bugly的那篇 《WKWebView 那些坑》,我們知道WKProcessPool可以解決不同的WKWebView 之間共享 Cookie(session Cookie and persistent Cookie)數(shù)據(jù), 具體的做法是創(chuàng)建一個(gè)單利,來(lái)持有WKProcessPool。
場(chǎng)景:在H5中點(diǎn)擊一些鏈接鹰祸,它是會(huì)在當(dāng)前的webView基礎(chǔ)上稚疹,重新創(chuàng)建一個(gè)webView來(lái)展示的,而不是在當(dāng)前webView上展示垂蜗。 具體創(chuàng)建方式就是回調(diào)在第二章中執(zhí)行WKUIDelegate的代理方法钾恢。
解決這一個(gè)問題的方式,具體代碼如下:

    WKWebViewConfiguration * webConfiguration = [[WKWebViewConfiguration alloc]init];
webConfiguration.processPool = [LLWKProcessPoolUtil sharedInstance].wkProcessPool;
    @interface LLWKProcessPoolUtil : NSObject

        + (LLWKProcessPoolUtil *)sharedInstance;
        
        /// WKProcessPool
        @property (nonatomic, strong) WKProcessPool *wkProcessPool;
        
        /// 銷毀wkProcessPool單例屬性
        - (void)destroyInstance;

    @end


#import "LLWKProcessPoolUtil.h"

@implementation LLWKProcessPoolUtil

+ (LLWKProcessPoolUtil *)sharedInstance
{
    static dispatch_once_t once;
    static YCWKProcessPoolUtil * __singleton__;
    dispatch_once( &once, ^{
        __singleton__ = [[LLWKProcessPoolUtil alloc] init];
    });
    return __singleton__;
}


#pragma mark - 不同webView中的Cookie
static WKProcessPool *__singlePool__ = nil;
static dispatch_once_t onceTokenPool;
- (WKProcessPool *)wkProcessPool
{
    dispatch_once( &onceTokenPool, ^{
        __singlePool__ = [[WKProcessPool alloc] init];
    });
    return __singlePool__;
}

- (void)destroyInstance
{
    onceTokenPool = 0;
    __singlePool__ =nil;
}

@end
遇到的坑:

這樣雖然可以解決創(chuàng)新創(chuàng)建的WKWebView的cookie訪問問題滴铅,但是因?yàn)槭菃卫钟械模?dāng)我們切換用戶登錄之后就乓,webView會(huì)出現(xiàn)帶有上一個(gè)用戶Cookie的問題汉匙,這對(duì)于設(shè)計(jì)到積分和金錢的業(yè)務(wù)就很麻煩了拱烁,H5以為是上一個(gè)用戶登錄的。 解決方法噩翠, 切換登錄的時(shí)候戏自,將單利持有的proceressPool銷毀掉,代碼如下:

[LLWKProcessPoolUtil destroyInstance];

但是這樣伤锚,我們會(huì)有另外一個(gè)問題擅笔,發(fā)生在iOS8~iOS10,proceressPool銷毀之后進(jìn)入再次進(jìn)入webView進(jìn)行登錄屯援,按照我們第四章中的Cookie策略猛们,Cookie死活沒有了。 比如得重新重新走一遍創(chuàng)建WKWebView狞洋,然后請(qǐng)求url的步驟才能生效弯淘。 好吧,原因是這個(gè)時(shí)候吉懊,document.Cookie也隨之丟失了庐橙。

解決辦法:

解決方法,你也想到了借嗽,重新給document.Cookie賦值态鳖。

第二坑:User Agent

知識(shí)點(diǎn)復(fù)習(xí):

我們加User Agent,就是方便H5后臺(tái)知道恶导,這個(gè)H5頁(yè)面是從咱公司APP進(jìn)去的郁惜。方便識(shí)別來(lái)源,做大數(shù)據(jù)和廣告數(shù)據(jù)統(tǒng)計(jì)甲锡。

遇到的坑:

之前的寫法兆蕉,是直接股改webView原生的User Agent。后來(lái)上線過程中缤沦,遇到一個(gè)廣告客戶的H5鏈接怎么都打不開虎韵,一直在重定向循環(huán)。
但是我們新建一個(gè)純凈WKWebView是可以正常打開的缸废。經(jīng)過仔細(xì)排查包蓝,才發(fā)現(xiàn)是User Agent的鍋。有些H5的后臺(tái)是根據(jù)設(shè)備瀏覽器上傳的User Agent來(lái)判斷設(shè)備的webView是否安全或者是否可以讓該webView打開網(wǎng)頁(yè)企量。很顯然测萎,他們是根據(jù)webView原生的來(lái)判定的。

解決辦法:

設(shè)置的時(shí)候不要覆蓋手機(jī)原生User Agent届巩, 我們要把我們自己公司的自定義User Agent字段追加到原生后邊硅瞧。也就是『原生User-Agent + 我們自己的User Agent』。比如:

Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko)   Mobile/16B91   LiLong=123445   LiLongBBB=Baidu

第三坑:后臺(tái)H5頁(yè)面不支持https://

遇到的坑:

最新測(cè)試反饋一個(gè)H5頁(yè)面有問題, 具體是在iOS上某些點(diǎn)擊不跳轉(zhuǎn). 開始以為是webView的問題, 新建項(xiàng)目加載這個(gè)鏈接也有問題. 并且在mac電腦的瀏覽器上也有相同問題. 但是同事打開就沒問題. 奇怪了. 都是mac電腦, 都是一個(gè)瀏覽器. 難道是鏈接的鍋? 后來(lái)發(fā)現(xiàn)還真是, 我這邊加載的"https://xxxxxxxx", 同事加載的是"http://xxxxxxxx". "https://xxxxxxxx"這個(gè)有問題.

解決辦法:

通知H5, iOS加載"http://xxxxxxxx"

第四坑:Request Header中寫入自定義Host導(dǎo)致請(qǐng)求個(gè)別網(wǎng)頁(yè)失敗

遇到的坑:

上一個(gè)離職的同事在寫webView請(qǐng)求的時(shí)恕汇,手動(dòng)在Request Header中設(shè)置了一次Host腕唧,這么做的原因不太清楚或辖,可能是因?yàn)榉?wù)器識(shí)別請(qǐng)求來(lái)源。之后很長(zhǎng)時(shí)間里也沒有問題枣接,但是前段時(shí)間有一天請(qǐng)求某個(gè)webView總是白屏颂暇,經(jīng)過排除法,最終確定是因?yàn)橹貙懥?code>Host但惶。代碼中設(shè)置Host的方法是這樣的:

    [request addValue:request.URL.host forHTTPHeaderField:@"Host"];
解決辦法:

不手動(dòng)在Request Header設(shè)置了一遍Host耳鸯,刪除這一行代碼。

交流


希望能和大家交流技術(shù)
Blog:http://www.lilongcnc.cc


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膀曾,一起剝皮案震驚了整個(gè)濱河市县爬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妓肢,老刑警劉巖捌省,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異碉钠,居然都是意外死亡纲缓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門喊废,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)祝高,“玉大人,你說(shuō)我怎么就攤上這事污筷」す耄” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵瓣蛀,是天一觀的道長(zhǎng)陆蟆。 經(jīng)常有香客問我,道長(zhǎng)惋增,這世上最難降的妖魔是什么叠殷? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮诈皿,結(jié)果婚禮上林束,老公的妹妹穿的比我還像新娘。我一直安慰自己稽亏,他們只是感情好壶冒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著截歉,像睡著了一般胖腾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天胸嘁,我揣著相機(jī)與錄音瓶摆,去河邊找鬼凉逛。 笑死性宏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的状飞。 我是一名探鬼主播毫胜,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诬辈!你這毒婦竟也來(lái)了酵使?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤焙糟,失蹤者是張志新(化名)和其女友劉穎口渔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穿撮,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缺脉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悦穿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攻礼。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖栗柒,靈堂內(nèi)的尸體忽然破棺而出礁扮,到底是詐尸還是另有隱情,我是刑警寧澤瞬沦,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布太伊,位于F島的核電站,受9級(jí)特大地震影響逛钻,放射性物質(zhì)發(fā)生泄漏僚焦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一绣的、第九天 我趴在偏房一處隱蔽的房頂上張望叠赐。 院中可真熱鬧,春花似錦屡江、人聲如沸芭概。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)罢洲。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惹苗,已是汗流浹背殿较。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桩蓉,地道東北人淋纲。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像院究,于是被迫代替她去往敵國(guó)和親洽瞬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 導(dǎo)語(yǔ) WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView 組件业汰,用以替代 UIKit...
    Jecky丶閱讀 8,341評(píng)論 2 22
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,089評(píng)論 1 32
  • 1伙窃、WKWebView 白屏問題WKWebView 自詡擁有更快的加載速度,更低的內(nèi)存占用样漆,但實(shí)際上 WKWebV...
    無(wú)名感恩閱讀 2,133評(píng)論 0 3
  • 1为障、WKWebView 白屏問題WKWebView 自詡擁有更快的加載速度,更低的內(nèi)存占用放祟,但實(shí)際上 WKWebV...
    iosRn閱讀 2,093評(píng)論 1 10
  • 轉(zhuǎn)載鏈接:騰訊Bugly 導(dǎo)語(yǔ) WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView ...
    Jelly_沫閱讀 2,859評(píng)論 0 3