javascript - 从 webView 中删除元素

标签 javascript ios swift webview

我使用此代码删除标题和其他内容,但问题是当我重新加载页面时,它会显示标题一秒钟,然后将其删除。我希望代码即使在重新加载时也能删除 header 。

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

最佳答案

如果您可以从 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 .

关于javascript - 从 webView 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51028282/

相关文章:

javascript - 将 javascript 文件链接到 html

ios - 我收到以下错误 "appium &"command not found on MAC

ios - iOS 中的视频编辑问题

ios - Swift 将字典数组传递给 NSMutableArray

swift - 为什么这一行 NSNotificationCenter.defaultCenter().postNotificationName(...) 抛出 SIGABRT

ios - 如何通过点击获得一个SCNNode?

javascript - 重定向后的警报框

javascript - 使用 Puppeteer,如何打开页面,获取数据,然后返回上一页以获取列表中的下一页?

swift - 如何从 servicestack swift 客户端获取 401 错误?

javascript - 显示意外结果的对象