gpt4 book ai didi

ios - 如何阻止外部资源加载到 WKWebView 上?

转载 作者:可可西里 更新时间:2023-11-01 04:09:39 26 4
gpt4 key购买 nike

我有一个加载网页的应用程序,但阻止下载图像、字体、javascript 等。为此,我实现了一个 NSURLProtocol 子类,它与 UIWebView 配合得很好。

但是我正在迁移到 WKWebview,并意识到我精心制作的 NSURLProtocol 类不再适用于过滤掉这些资源。

有人知道如何实现过滤/阻止吗?

如果您想知道我是如何进行迁移的,我从这篇文章开始:http://floatlearning.com/2014/12/uiwebview-wkwebview-and-tying-them-together-using-swift/

最佳答案

从 iOS 11 开始,您可以使用 WKContentRuleList

首先,创建内容规则或列表。每个规则都由一个触发器和一个操作组成。看 Apple's Documentation on Content Rule creation

这是一个创建示例,阻止所有图像和样式表内容,但允许那些以 jpeg 结尾的内容忽略之前的规则:

     let blockRules = """
[{
"trigger": {
"url-filter": ".*",
"resource-type": ["image"]
},
"action": {
"type": "block"
}
},
{
"trigger": {
"url-filter": ".*",
"resource-type": ["style-sheet"]
},
"action": {
"type": "block"
}
},
{
"trigger": {
"url-filter": ".*.jpeg"
},
"action": {
"type": "ignore-previous-rules"
}
}]
"""

有了规则列表,您可以将它们添加到 ContentRuleListStore

    import WebKit
@IBOutlet weak var wkWebView: WKWebView!

let request = URLRequest(url: URL(string: "https://yourSite.com/")!)

WKContentRuleListStore.default().compileContentRuleList(
forIdentifier: "ContentBlockingRules",
encodedContentRuleList: blockRules) { (contentRuleList, error) in

if let error = error {
return
}

let configuration = self.webView.configuration
configuration.userContentController.add(contentRuleList!)

self.wkWwebView.load(self.request)
}

如果稍后您想要删除所有规则,请调用:

    self.wkWebView.configuration.userContentController.removeAllContentRuleLists()
self.wkWebView.load(self.request)

这是 2017 WWDC video

祝你好运!

我创建了一个示例项目 on Github WKContentRuleExample

关于ios - 如何阻止外部资源加载到 WKWebView 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32119975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com