如何从UIWebView获取html内容?

时间:2015-03-24 14:28:42

标签: ios swift uiwebview

我正在使用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)")
}

文档只返回一个空字符串(Optional(""))。 window.location.href 部分工作正常。我做错了什么?

4 个答案:

答案 0 :(得分:15)

我认为你必须像这样评估javascript:

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

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

答案 1 :(得分:2)

现在,不赞成使用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...
}

答案 2 :(得分:0)

我正在使用jqxWidget在UIWebView上显示分析(图表),我的要求是在用户点击iPad上另一个FullScreenViewController上的“打印预览”时全屏显示相同的图表。 当我使用上述解决方案时,它会显示无颜色(黑色)的图表。

我不希望再次加载已在先前UIWebView对象上加载的动态内容。

答案 3 :(得分:0)

我找到了关于jqxWidget的问题的解决方案。 该UIWebView内容引用了已捆绑在App中的.js和.css文件。我刚刚添加了App的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];