WKWebView的網(wǎng)絡(luò)攔截問題

利用NSURLProtocol攔截WKWebView的請求
我們知道 ,ios 8.0以后资锰,apple給出了一個WKWebView來替換 UIWebView,前者比后者在加載速度方面優(yōu)化了很多,但是也有不少坑點浪慌,比如在攔截wkwebView的請求上深员,apple始終沒有給出明確的API供開發(fā)者使用牵舱,正常情況下瓷翻,我們自定義一個NSURLProtocol類仰税,然后在AppDelegate里面register一波祸憋,就可以攔截到app內(nèi)部所有的網(wǎng)絡(luò)請求,但是你會發(fā)現(xiàn)肖卧,wkwebView并不吃這一套蚯窥,what the fuck!,這一點在網(wǎng)上有人說wkwebView的請求是在單獨的進程里面,為了性能方面的考慮拦赠,所以不走NSURLProtocol巍沙,但是通過打斷點會發(fā)現(xiàn),它會走一下+ (BOOL)canInitWithRequest:(NSURLRequest *)request,然而這就尷尬了荷鼠,為啥他會走一下句携,然后就一直不走了呢?于是我開始去研究了一波技術(shù)討論允乐,請教了一些大牛矮嫉,找到了解決方案:寫一個單獨的NSURLProtocol類的分類方法,這里要提醒一下:由于這是私有方法牍疏,可能導(dǎo)致上線被拒!!!
.h文件:

+ (void)wk_registerScheme:(NSString*)scheme;

+ (void)wk_unregisterScheme:(NSString*)scheme;

.m文件:

FOUNDATION_STATIC_INLINE Class ContextControllerClass() {
    static Class cls;
    if (!cls) {
        cls = [[[WKWebView new] valueForKey:@"browsingContextController"] class];
    }
    return cls;
}

FOUNDATION_STATIC_INLINE SEL RegisterSchemeSelector() {
    return NSSelectorFromString(@"registerSchemeForCustomProtocol:");
}

FOUNDATION_STATIC_INLINE SEL UnregisterSchemeSelector() {
    return NSSelectorFromString(@"unregisterSchemeForCustomProtocol:");
}

@implementation NSURLProtocol (WebKitSupport)

+ (void)wk_registerScheme:(NSString *)scheme {
    Class cls = ContextControllerClass();
    SEL sel = RegisterSchemeSelector();
    if ([(id)cls respondsToSelector:sel]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        [(id)cls performSelector:sel withObject:scheme];
#pragma clang diagnostic pop
    }
}

+ (void)wk_unregisterScheme:(NSString *)scheme {
    Class cls = ContextControllerClass();
    SEL sel = UnregisterSchemeSelector();
    if ([(id)cls respondsToSelector:sel]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        [(id)cls performSelector:sel withObject:scheme];
#pragma clang diagnostic pop
    }
}

然后在AppDelegate里面去注冊一波scheme蠢笋,一般是注冊http和https,然后打一波斷點你就會發(fā)現(xiàn),可以攔截了鳞陨,可以為所欲為了昨寞,一般對wkwebView的攔截的原因一般是要加一些特定的請求頭或者攔截廣告(接觸的項目里面是這樣干的)
+ (BOOL)canInitWithRequest:(NSURLRequest *)request在這里進行過濾判斷,
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request這里面可以拿到被攔截的請求厦滤,可以在這里面對這個request進行二次處理援岩,然后在startLoading方法里面自己進行自定義的處理!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掏导,一起剝皮案震驚了整個濱河市享怀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌趟咆,老刑警劉巖凹蜈,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忍啸,居然都是意外死亡仰坦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門计雌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悄晃,“玉大人,你說我怎么就攤上這事凿滤÷栝希” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵翁脆,是天一觀的道長眷蚓。 經(jīng)常有香客問我,道長反番,這世上最難降的妖魔是什么沙热? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任叉钥,我火速辦了婚禮,結(jié)果婚禮上篙贸,老公的妹妹穿的比我還像新娘投队。我一直安慰自己,他們只是感情好爵川,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布敷鸦。 她就那樣靜靜地躺著,像睡著了一般寝贡。 火紅的嫁衣襯著肌膚如雪扒披。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天圃泡,我揣著相機與錄音碟案,去河邊找鬼。 笑死洞焙,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的拯啦。 我是一名探鬼主播澡匪,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼褒链!你這毒婦竟也來了唁情?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甫匹,失蹤者是張志新(化名)和其女友劉穎甸鸟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兵迅,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡抢韭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恍箭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刻恭。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扯夭,靈堂內(nèi)的尸體忽然破棺而出鳍贾,到底是詐尸還是另有隱情,我是刑警寧澤交洗,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布骑科,位于F島的核電站,受9級特大地震影響构拳,放射性物質(zhì)發(fā)生泄漏咆爽。R本人自食惡果不足惜梁棠,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伍掀。 院中可真熱鬧掰茶,春花似錦、人聲如沸蜜笤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽把兔。三九已至沪伙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間县好,已是汗流浹背围橡。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缕贡,地道東北人翁授。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像晾咪,于是被迫代替她去往敵國和親收擦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

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

  • 前言 關(guān)于UIWebView的介紹谍倦,相信看過上文的小伙伴們塞赂,已經(jīng)大概清楚了吧,如果有問題昼蛀,歡迎提問宴猾。 本文是本系列...
    CoderLF閱讀 8,973評論 2 12
  • 導(dǎo)語 WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView 組件,用以替代 UIKit...
    yahoouchen閱讀 4,095評論 8 17
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,416評論 8 265
  • 最近半年,斷斷續(xù)續(xù)在想利用工作之余的8小時學一門外語夫植。經(jīng)過反復(fù)選擇税产,最后選擇日語。原因如下: 第一個偷崩,我好喜歡日本...
    東方默惜閱讀 511評論 0 1
  • 30號感恩 幸運 微笑 中午為了節(jié)省時間在佳旺快餐辟拷,看到5元素菜,看起來色香味俱全阐斜,才五元肯定是虧本的衫冻,佳旺是在宣...
    A00Helen閱讀 232評論 0 1