How to load part of HTML from url even after event is clicked?

I wrote some code to load all the html from the url and parse it to remove the header. So I got the rest of the html heading below the heading. However, after clicking the event in the html body, the screen displays the full html from the url.

Is there any solution for this? or did I make a mistake to approach this problem?

The code I made is below

import UIKit
import Fuzi

class ViewController: UIViewController {

    @IBOutlet weak var webView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let myURLString = "http://yahoo.com"
        var myHTMLString = ""
        guard let myURL = URL(string: myURLString) else {
            print("Error: \(myURLString) doesn't seem to be a valid URL")
            return
        }

        do {
            myHTMLString = try String(contentsOf: myURL, encoding: .utf8)
        } catch let error {
            print("Error: \(error)")
        }

        do {
            // if encoding is omitted, it defaults to NSUTF8StringEncoding
            let doc = try! HTMLDocument(string: myHTMLString, encoding: String.Encoding.utf8)

            let fullHtml:String = (doc.firstChild(xpath: "//*")?.rawXML)!


            if let header = doc.firstChild(xpath: "//body/div/header") {

                let headerString:String = header.rawXML

                let withoutHeader = fullHtml.replacingOccurrences(of: headerString, with: "")

                webView.loadHTMLString(withoutHeader as String, baseURL: nil)
            }
        } catch let error{
            print(error)
        }

    }

      

0


source to share


2 answers


Try this, it works with UIWebViewNavigationType.linkClicked. You can modify it for use with a different UIWebViewNavigationType.



import UIKit
import Fuzi

class ViewController: UIViewController, UIWebViewDelegate {

@IBOutlet weak var webView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    webView.delegate = self

    let myURLString = "http://yahoo.com"
    var myHTMLString = ""
    guard let myURL = URL(string: myURLString) else {
        print("Error: \(myURLString) doesn't seem to be a valid URL")
        return
    }

    do {
        myHTMLString = try String(contentsOf: myURL, encoding: .utf8)
    } catch let error {
        print("Error: \(error)")
    }

    do {
        // if encoding is omitted, it defaults to NSUTF8StringEncoding
        let doc = try! HTMLDocument(string: myHTMLString, encoding: String.Encoding.utf8)

        let fullHtml:String = (doc.firstChild(xpath: "//*")?.rawXML)!


        if let header = doc.firstChild(xpath: "//body/div/header") {

            let headerString:String = header.rawXML

            let withoutHeader = fullHtml.replacingOccurrences(of: headerString, with: "")

            webView.loadHTMLString(withoutHeader as String, baseURL: nil)
        }
    } catch let error{
        print(error)
    }
}

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if navigationType == .linkClicked
    {
        let myURLString = webView.request?.url.absoluteString
        webView.stopLoading()
        var myHTMLString = ""
        let myURL = URL(string: myURLString)
    do {
        myHTMLString = try String(contentsOf: myURL, encoding: .utf8)
    } catch let error {
        print("Error: \(error)")
    }

    do {
        // if encoding is omitted, it defaults to NSUTF8StringEncoding
        let doc = try! HTMLDocument(string: myHTMLString, encoding: String.Encoding.utf8)

        let fullHtml:String = (doc.firstChild(xpath: "//*")?.rawXML)!


        if let header = doc.firstChild(xpath: "//body/div/header") {

            let headerString:String = header.rawXML

            let withoutHeader = fullHtml.replacingOccurrences(of: headerString, with: "")

            webView.loadHTMLString(withoutHeader as String, baseURL: nil)
        }
    } catch let error{
        print(error)
    }
    }
    return true
}

      

0


source


I found the answer!

Thanks to @Sherman for the hint for solving this problem.

I had to replace the line of code below

if navigationType == .linkClicked

      



to

if navigationType == UIWebViewNavigationType.linkClicked

      

Then it works!

0


source







All Articles