【问题标题】:How to remove DIV tag from webpage in WKWebView in swift 4?如何在swift 4中从WKWebView中的网页中删除DIV标签?
【发布时间】: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.
   }
}

【问题讨论】:

    标签: javascript ios swift wkwebview


    【解决方案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 你需要按类获取元素并删除它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多