我使用此代码删除了标题和其他内容,但问题是当我重新加载页面时,它将显示标题一秒钟,然后将其删除。我希望代码即使在重新加载时也删除标题。
private func removeElements(fromWebView webView: UIWebView) {
self.elementsToRemove.forEach { self.removeElement(elementID: $0, fromWebView: webView) }
}
private func removeElement(elementID: String, fromWebView webView: UIWebView) {
let removeElementIdScript = "var element = document.getElementById('\(elementID)'); element.parentElement.removeChild(element);"
webView.stringByEvaluatingJavaScript(from: removeElementIdScript)
let removeElementClassScript = "document.getElementsByClassName('\ . (elementID)')[0].style.display=\"none\";"
webView.stringByEvaluatingJavaScript(from: removeElementClassScript)
}
答案 0 :(得分:0)
如果您可以从UIWebView
切换到WKWebView
并且目标是iOS 11+,则可以使用WKContentRuleListStore
使用任意规则(如广告拦截程序)来过滤内容。这是一个从stackoverflow网站上删除顶部栏的示例:
import UIKit
import WebKit
let contentRules = """
[
{
"trigger": {
"url-filter": ".*"
},
"action": {
"type": "css-display-none",
"selector": "div.topbar"
}
}
]
"""
class ViewController: UIViewController {
@IBOutlet weak var webView: WKWebView!
override func loadView() {
super.loadView()
let request = URLRequest(url: URL(string: "https://stackoverflow.com")!)
WKContentRuleListStore.default().compileContentRuleList(forIdentifier: "ContentBlockingRules", encodedContentRuleList: contentRules) { rulesList, error in
if let error = error {
print(error)
return
}
guard let rulesList = rulesList else { return }
let config = self.webView.configuration
config.userContentController.add(rulesList)
self.webView.load(request)
}
}
}
您可以找到有关内容禁止规则here的更多信息。