Swift 禁用在UIWebView和/或WKWebView中加载样式表

Swift 禁用在UIWebView和/或WKWebView中加载样式表,swift,webview,uiwebview,webkit,wkwebview,Swift,Webview,Uiwebview,Webkit,Wkwebview,我已经用这个试过了所有的方法。我已经阅读了苹果的每一篇文章,没有任何地方可以找到如何在传统的UIWebView或新的WKWebView中禁用CSS(样式)加载。我不介意使用什么web视图,只要它可以实现这一点 我尝试了WKPreferences()和WKWebViewConfiguration,但都没有启用成员userstylesheet 我提到了这篇苹果的文章 有人知道答案以及如何在Swift 4上实现这一点吗?您引用的WebView类非常古老,已被弃用。如果您需要向应用程序添加网络视图,请改

我已经用这个试过了所有的方法。我已经阅读了苹果的每一篇文章,没有任何地方可以找到如何在传统的UIWebView或新的WKWebView中禁用CSS(样式)加载。我不介意使用什么web视图,只要它可以实现这一点

我尝试了
WKPreferences()
WKWebViewConfiguration
,但都没有启用成员userstylesheet

我提到了这篇苹果的文章


有人知道答案以及如何在Swift 4上实现这一点吗?

您引用的
WebView
类非常古老,已被弃用。如果您需要向应用程序添加网络视图,请改用
WKWebView
。这个答案适用于iOS>=11和macOS>=10.13

您需要的是将
WKContentRuleList
添加到
WKWebView
的配置中。它们类似于您可能已经在手机上安装的Safari内容拦截器(即广告拦截器):

// This should ideally be in a file but we're using string for convenience
let jsonRuleList = """
[{
    "trigger": {
        "url-filter": ".*",
        "resource-type": ["style-sheet"]
    },
    "action": {
        "type": "block"
    }
}]
"""

// Compile the content-blocking list
WKContentRuleListStore.default().compileContentRuleList(forIdentifier: "blockStyleSheet", encodedContentRuleList: jsonRuleList) { list, error in
    guard error == nil else { print(error!.localizedDescription); return }
    guard let list = list else { return }

    // Add the stylesheet-blocker to your webview's configuration
    let configuration = WKWebViewConfiguration()
    configuration.userContentController.add(list)

    // Adding the webview to the view. Nothing to see here
    self.webView = WKWebView(frame: self.view.bounds, configuration: configuration)
    self.view.addSubview(self.webView)

    // Let's try Apple's website without CSS
    let request = URLRequest(url: URL(string: "https://www.apple.com")!)
    self.webView.load(request)
}
结果:

参考资料

  • (WWDC视频)