从 Swift 的网络视图中删除部分

Remove section from webview in Swift

我有这个网站 http://www.zakatona.com 我想在 swift 中制作一个 webView 应用程序,但我想从网页中删除导航栏。

我尝试通过 ID 删除,但我不能。

class ViewController: UIViewController {

  @IBOutlet weak var webView: UIWebView!

  public var internalHosts: [String] = ["zakatona.com"]

  public var elementsToRemove: [String] = [
    "navbarappleid",
    "minimal-intro",
    "features",
    "downloadappleid"
  ]


  override func viewDidLoad() {
    super.viewDidLoad()

    getPost()
    setupSideMenu(storyBoard: self.storyboard!)

  }

  func getPost() {
    loadURL(urlString: "http://www.zakatona.com/zakat-calculator.php")
  }

  func loadURL(urlString: String) {

    if let url = URL(string: urlString) {
        self.webView.loadRequest(URLRequest(url: url))
    }
  }
}

extension ViewController:UIWebViewDelegate {

  func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

    if let url = request.url, navigationType == .linkClicked, isExternalHost(forURL: url), UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url)
        return false
    }

    return true
  }

  func webViewDidStartLoad(_ webView: UIWebView) {
    self.startActivityIndicator()
    self.removeElements(fromWebView: webView)
  }

  func webViewDidFinishLoad(_ webView: UIWebView) {
    self.removeElements(fromWebView: webView)
    self.stopActivityIndicator()
  }

  private func startActivityIndicator() {
    UIApplication.shared.isNetworkActivityIndicatorVisible = true
  }

  private func stopActivityIndicator() {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false
  }

  private func isExternalHost(forURL url: URL) -> Bool {

    if let host = url.host, internalHosts.contains(host) {
        return false
    }

    return true
  }

  private func removeElements(fromWebView webView: UIWebView) {
    self.elementsToRemove.forEach { self.removeElement(elementID: [=11=], 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)
  }
}

我使用此代码通过 id 删除元素,但此代码对我不起作用。

使用 WKWebView 而不是 UIWebView。这是我的 html

<html>
    <body bgcolor="#E6E6FA">
            <button id="somebutton">Name</button>
    </body>
</html>

我将在加载 WKWebView 时删除 ID 为 somebutton 的按钮。

我使用了本地 html 文件,但这应该不会影响 O/P。

没有添加任何 WKWebView 委托方法 O/P 看起来像

现在继续添加代表

self.webView.navigationDelegate = self

实现委托方法

extension ViewController : WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        let elementID = "somebutton"
        let removeElementIdScript = "var element = document.getElementById('\(elementID)'); element.parentElement.removeChild(element);"
        webView.evaluateJavaScript(removeElementIdScript) { (response, error) in
            debugPrint("Am here")
        }
    }
}

O/P 添加委托方法后

希望对您有所帮助