如何从UIWebView中获取HTML内容?

16

我正在使用UIWebView加载一个网页

let urlStr = "http://duckduckgo.com"
let urlReq = NSMutableURLRequest(URL: NSURL(string: urlStr)!)
webView.loadRequest(urlReq)

然后,在页面加载完成后,我想访问HTML内容。

func webViewDidFinishLoad(webView: UIWebView) {
    let href = webView.stringByEvaluatingJavaScriptFromString("window.location.href")
    println("window.location.href  = \(href)")

    let doc = webView.stringByEvaluatingJavaScriptFromString("document")
    println("document = \(doc)")
}

但是document仅返回一个空字符串(Optional(""))。而window.location.href部分运行正常。我做错了什么?

3个回答

25

我认为你需要这样评估 JavaScript:

let doc = webView.stringByEvaluatingJavaScriptFromString("document.documentElement.outerHTML")

在这种情况下,您将获取整个HTML。


8

现在,当UIWebView被弃用时,您需要使用类似于以下的语法:

webView.evaluateJavaScript("document.documentElement.outerHTML") { (html, error) in
    guard let html = html as? String else {
        print(error)
        return
    }
    // Here you have HTML of the whole page.
}

接下来,您可以创建一个函数,像这样轻松地从webView中获取HTML:

func getHTML(_ completion: @escaping (String) -> ()) {
    webView.evaluateJavaScript("document.documentElement.outerHTML") { (html, error) in
        guard let html = html as? String else {
            print(error)
            return
        }
        completion(html)
    }
}

getHTML { html in
    // Here you have HTML string
    print(html) // for example...
}

0
我找到了关于jqxWidget的问题解决方案。 UIWebView内容引用了已经捆绑在应用程序中的.js和.css文件。我只需要添加应用程序MainBundle的基本URL即可。
NSString  *html = [self.webview1 stringByEvaluatingJavaScriptFromString: @"document.documentElement.outerHTML"]; //document.body.innerHTML

NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath:path];

[objFullScreenViewCntrl.webview2 loadHTMLString:html baseURL:baseURL];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接