简体   繁体   English

从webView中删除元素

[英]Removing element from webView

I used this code to remove the header and other things but the problem is when I reload the page it will show the header for a second then remove it. 我使用此代码删除了标题和其他内容,但是问题是当我重新加载页面时,它将显示标题一秒钟,然后将其删除。 I want the code to remove the header even in the reload. 我希望代码即使在重新加载时也删除标题。

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)
}

If you can switch from UIWebView to WKWebView and your target is iOS 11+, you can use WKContentRuleListStore to filter the content using your arbitrary rules (just like ad blockers). 如果您可以从UIWebView切换到WKWebView并且目标是iOS 11+,则可以使用WKContentRuleListStore使用任意规则来过滤内容(就像广告拦截程序一样)。 Here's an example that removes top bar from stackoverflow website: 这是从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)
    }
  }
}

You can find more about content blocking rules here . 您可以在此处找到有关内容阻止规则的更多信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM