你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS11 WKWebView內容過濾規則詳解

iOS11 WKWebView內容過濾規則詳解

編輯:IOS開發綜合

WKWebView中新增了一個功能,可以對WebView的內容添加一些自定義的過濾規則。這個功能原來在 Safari Extension 中被引入,從 11 開始同樣適用於WKWebView。

使用方法

原理上就是提供一個 JSON 給 WebKit,這個 JSON 包括內容的觸發規則(trigger)和對應的處理方式(action)。比如:

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

WebKit 會把攔截規則編譯成高效的二進制碼。使用方法如下:

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

可使用的處理方式:Action

對應的 Action 有以下幾種:

  1. block:放棄加載資源,如果該資源已經緩存也忽略緩存
  2. block-cookies:所有發送的請求的header中都會過濾掉cookie
  3. css-display-none:隱藏使用 CSS selector 的頁面元素,同時還有關聯的selector:
    "action": {
       "type": "css-display-none",
       "selector": "#newsletter, :matches(.main-page, .article) .news-overlay"
    }

  4. ignore-previous-rules:前面觸發的規則不執行
  5. make-https:把網頁裡的 http 請求改為 https 請求

規則觸發器:trigger

觸發器必須有url-filter,可選的鍵有:resource-type、if-domain、unless-domain

  1. url-filter 匹配 URL 的正則表達式
  2. if-domain 或者 unless-domain if-domain:規則只在這些域名下起作用。unless-domain:這些域名除外。
  3. resource-type 資源的類型,對應的 value 有:
    1. document
    2. image
    3. style-sheet
    4. script
    5. font
    6. raw (Any untyped load, such as XMLHttpRequest)
    7. svg-document
    8. media
    9. popup
  4. load-type 資源的歸屬。默認是全部的資源。如果收到填有兩種 value:
    1. first-party 只有當資源和頁面的scheme、域名、端口一致時才觸發
    2. third-party 只有當資源和頁面的域名不一致時才觸發

舉個 trigger 的示例就是:

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

總結

可以通過配置規則攔截頁面裡的資源請求、隱藏頁面裡的指定元素、將http請求轉換成https。

參考

Content Blocking Rules

WWDC 17:customized_loading_in_wkwebview

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved