如何在swift 4中从WKWebView中的网页中删除DIV标签?

Posted

技术标签:

【中文标题】如何在swift 4中从WKWebView中的网页中删除DIV标签?【英文标题】:How to remove DIV tag from webpage in WKWebView in swift 4? 【发布时间】:2018-02-07 10:37:22 【问题描述】:

在 swift 4 中将网页加载到 WKWebVIew 时,我想从网页中删除页眉和页脚 div 标签。 我已经尝试了以下代码。但它不工作.. 给我解决方案!

class ViewController: UIViewController 

   @IBOutlet var webView: WKWebView!

   override func viewDidLoad() 
      super.viewDidLoad()

      var url: URL?
      url = URL(string: "https://www.walkmate.co.in")
      let request = URLRequest(url: url!)
      webView.load(request)
      let script="function() var footer=document.getElementsByClassName('footer-env')[0]; footer.parentNode.removeChild(footer); )())"

      webView.evaluatejavascript(script)  (result, error) in
         if error != nil 
            print(result)
         
      

   

   override func didReceiveMemoryWarning() 
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
   

【问题讨论】:

【参考方案1】:

我认为你应该等待网站加载完毕。

您需要 WKNavigationDelegate 并在

中评估您的脚本
func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) 
   print("Finished navigating to url \(webView.url)");

实际上,当您要评估脚本时,您的网站并未加载。

** 更新**

你需要这样的东西

// add the protocol
class ViewController: UIViewController, WKNavigationDelegate 

   @IBOutlet var webView: WKWebView!

   override func viewDidLoad() 
      super.viewDidLoad()

      var url: URL?
      url = URL(string: "https://www.walkmate.co.in")
      let request = URLRequest(url: url!)

      webView.navigationDelegate = self // set the delegate

      webView.load(request)

   

   func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) 
      print("Finished navigating to url \(webView.url)");

      let script="function() var footer=document.getElementsByClassName('footer-env')[0]; footer.parentNode.removeChild(footer); )())"

      webView.evaluateJavaScript(script)  (result, error) in
         if error != nil 
            print(result)
         
      
   

   override func didReceiveMemoryWarning() 
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
   

【讨论】:

什么不起作用? didFinishNavigation 中的打印被执行了吗?在打印“完成导航到 url”之后,您正在 didFinishNavigation 方法中执行脚本吗? 我会,但老实说,堆栈溢出不是代码编写服务...检查 didFinishNavigation 中的代码是否会被执行。 谢谢,我也试过这段代码......这也不起作用......我什至不会打印“完成导航到 url (webView.url)”这一行......这是控制台上的响应 2018-02-07 16:38:31.033969+0530 Test[7127:197640] [MC] 延迟加载 NSBundle MobileCoreServices.framework 2018-02-07 16:38:31.035541+0530 Test[7127: 197640] [MC] 加载 MobileCoreServices.framework 你可以忽略,这与你的问题无关。 @HimanshuMoradiya 你需要按类获取元素并删除它。

以上是关于如何在swift 4中从WKWebView中的网页中删除DIV标签?的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中从 WKWebview 获取 HTML

来自钥匙串的 Swift 4 WKWebView 身份验证

SWIFT - ScrollView 内的 WKWebView 中的 HTML 滚动事件

如何在 Swift 3 的 WKWebView 中注入 javascript

iOS Swift5.0 WKWebView使用JS与Swift交互

如何将 swift 对象传递给 javascript (WKWebView / swift)