iOS 11:WKWebView內(nèi)容過濾規(guī)則詳解

WKWebView中新增了一個(gè)功能俊柔,可以對(duì)WebView的內(nèi)容添加一些自定義的過濾規(guī)則。這個(gè)功能原來在 Safari Extension 中被引入敦迄,從 11 開始同樣適用于WKWebView斧散。

使用方法

原理上就是提供一個(gè) JSON 給 WebKit,這個(gè) JSON 包括內(nèi)容的觸發(fā)規(guī)則(trigger)和對(duì)應(yīng)的處理方式(action)悼凑。比如:

[{
"trigger": {
"url-filter": ".*" },
"action": {
"type": "make-https"} 
}]

WebKit 會(huì)把攔截規(guī)則編譯成高效的二進(jìn)制碼偿枕。使用方法如下:

WKContentRuleListStore.default().compileContentRuleList(
   forIdentifier: "ContentBlockingRules",
  encodedContentRuleList: jsonString) { (contentRuleList, error) in
    if let error = error {
         return
    }
  let configuration = WKWebViewConfiguration()          
  configuration.userContentController.add(ruleList!)  
}

可使用的處理方式:Action

對(duì)應(yīng)的 Action 有以下幾種:

  • block
    放棄加載資源璧瞬,如果該資源已經(jīng)緩存也忽略緩存
  • block-cookies
    所有發(fā)送的請(qǐng)求的header中都會(huì)過濾掉cookie
  • css-display-none
    隱藏使用 CSS selector 的頁面元素,同時(shí)還有關(guān)聯(lián)的selector
"action": {
        "type": "css-display-none",
        "selector": "#newsletter, :matches(.main-page, .article) .news-overlay"
}
  • ignore-previous-rules
    前面觸發(fā)的規(guī)則不執(zhí)行
  • make-https
    把網(wǎng)頁里的 http 請(qǐng)求改為 https 請(qǐng)求

規(guī)則觸發(fā)器:trigger

觸發(fā)器必須有<code>url-filter</code>渐夸,可選的鍵有:<code>resource-type</code>嗤锉、<code>if-domain</code>、<code>unless-domain</code>

  • url-filter
    匹配 URL 的正則表達(dá)式
  • if-domain 或者 unless-domain
    if-domain:規(guī)則只在這些域名下起作用墓塌。unless-domain:這些域名除外瘟忱。
  • resource-type
    資源的類型,對(duì)應(yīng)的 value 有:
    • document
    • image
    • style-sheet
    • script
    • font
    • raw (Any untyped load, such as XMLHttpRequest)
    • svg-document
    • media
    • popup
  • load-type
    資源的歸屬苫幢。默認(rèn)是全部的資源酷誓。如果收到填有兩種 value:
    • first-party
      只有當(dāng)資源和頁面的scheme、域名态坦、端口一致時(shí)才觸發(fā)
    • third-party
      只有當(dāng)資源和頁面的域名不一致時(shí)才觸發(fā)

舉個(gè) trigger 的示例就是:

"trigger": {
        "url-filter": ".*",
        "resource-type": ["image", "style-sheet"],
        "unless-domain": ["your-content-server.com", "trusted-content-server.com"]
}

總結(jié)

可以通過配置規(guī)則攔截頁面里的資源請(qǐng)求盐数、隱藏頁面里的指定元素、將http請(qǐng)求轉(zhuǎn)換成https伞梯。

也歡迎關(guān)注我的微博:@沒故事的卓同學(xué)

參考

Content Blocking Rules
WWDC 17:customized_loading_in_wkwebview

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玫氢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谜诫,更是在濱河造成了極大的恐慌漾峡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喻旷,死亡現(xiàn)場(chǎng)離奇詭異生逸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)且预,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門槽袄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锋谐,你說我怎么就攤上這事遍尺。” “怎么了涮拗?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵乾戏,是天一觀的道長。 經(jīng)常有香客問我三热,道長鼓择,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任就漾,我火速辦了婚禮呐能,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘从藤。我一直安慰自己催跪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布夷野。 她就那樣靜靜地躺著懊蒸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悯搔。 梳的紋絲不亂的頭發(fā)上骑丸,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天排霉,我揣著相機(jī)與錄音掖蛤,去河邊找鬼玄柠。 笑死谦去,一個(gè)胖子當(dāng)著我的面吹牛己莺,可吹牛的內(nèi)容都是我干的洲脂。 我是一名探鬼主播缠俺,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼攒发,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼在刺!你這毒婦竟也來了逆害?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蚣驼,失蹤者是張志新(化名)和其女友劉穎魄幕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颖杏,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纯陨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了留储。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翼抠。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖获讳,靈堂內(nèi)的尸體忽然破棺而出机久,到底是詐尸還是另有隱情,我是刑警寧澤赔嚎,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布膘盖,位于F島的核電站,受9級(jí)特大地震影響尤误,放射性物質(zhì)發(fā)生泄漏侠畔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一损晤、第九天 我趴在偏房一處隱蔽的房頂上張望软棺。 院中可真熱鬧,春花似錦尤勋、人聲如沸喘落。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘦棋。三九已至稀火,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赌朋,已是汗流浹背凰狞。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沛慢,地道東北人赡若。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像团甲,于是被迫代替她去往敵國和親逾冬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理躺苦,服務(wù)發(fā)現(xiàn)粉渠,斷路器,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • iOS 的 Cookie 存取 https://juejin.im/entry/58d4c4cc44d904006...
    Farmers閱讀 5,930評(píng)論 0 16
  • WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView 組件圾另,用以替代 UIKit 中笨...
    Aiana閱讀 4,589評(píng)論 1 8
  • 導(dǎo)語 WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView 組件霸株,用以替代 UIKit...
    hope7th閱讀 14,983評(píng)論 4 65
  • 轉(zhuǎn)載鏈接:騰訊Bugly 導(dǎo)語 WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView ...
    Jelly_沫閱讀 2,860評(píng)論 0 3