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 有以下幾種:
"action": { "type": "css-display-none", "selector": "#newsletter, :matches(.main-page, .article) .news-overlay" }
規則觸發器:trigger
觸發器必須有url-filter,可選的鍵有:resource-type、if-domain、unless-domain
舉個 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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。