如何仅显示部分网页内容(快速)

时间:2015-06-01 19:45:05

标签: ios swift uiwebview nsurlrequest

我对编码很陌生(根本没有任何编程语言的背景)。我正在努力学习。我想创建一个简单的天气应用程序,一旦用户进入城市,就会在文本中显示天气信息。我从weather-forecast.com获取内容。我已经想出了如何加载Web内容,但我想只显示页面内容的片段(一个段落),而不是整个页面。有人可以告诉我该怎么做吗?

{
import UIKit

class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var cityText: UITextField!

    @IBOutlet weak var webContent: UIWebView!

    @IBAction func GoButtonPressed(sender: AnyObject) {

        let url = NSURL (string: "http://www.weather-forecast.com");
        let requestObj = NSURLRequest(URL: url!); 
        webContent.loadRequest(requestObj);
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.        
    }

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

3 个答案:

答案 0 :(得分:2)

这是一个简单视图控制器的示例,它只加载网站dribble.com的一部分。控制器具有选择DOM元素并仅显示该元素的方法。它非常简单,但功能强大,足以说明如何进一步开展此工作。

import UIKit
import JavaScriptCore
import WebKit

class TestViewController: UIViewController {

    private weak var webView: WKWebView!

    private var userContentController: WKUserContentController!

    override func viewDidLoad() {
        super.viewDidLoad()
        createViews()

        loadPage("https://dribbble.com/", partialContentQuerySelector: ".dribbbles.group")
    }

    private func createViews() {
         userContentController = WKUserContentController()

        let configuration = WKWebViewConfiguration()
        configuration.userContentController = userContentController

        let webView = WKWebView(frame: view.bounds, configuration: configuration)
        webView.setTranslatesAutoresizingMaskIntoConstraints(false)
        view.addSubview(webView)

        let views: [String: AnyObject] = ["webView": webView, "topLayoutGuide": topLayoutGuide]
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[topLayoutGuide][webView]|", options: .allZeros, metrics: nil, views: views))
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[topLayoutGuide][webView]|", options: .allZeros, metrics: nil, views: views))


        self.webView = webView
    }

    private func loadPage(urlString: String, partialContentQuerySelector selector: String) {
        userContentController.removeAllUserScripts()
        let userScript = WKUserScript(source: scriptWithDOMSelector(selector),
        injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,
            forMainFrameOnly: true)

        userContentController.addUserScript(userScript)

        let url = NSURL(string: urlString)!
        webView.loadRequest(NSURLRequest(URL: url))
    }

    private func scriptWithDOMSelector(selector: String) -> String {
        let script =
        "var selectedElement = document.querySelector('\(selector)');" +
        "document.body.innerHTML = selectedElement.innerHTML;"
        return script
    }

}

上面示例中显示的视图控制器仅加载照片,运球网站内的设计部分。

答案 1 :(得分:0)

您无法轻松完成此操作 - UIWebView没有任何API可以显示正在加载的网页结构,也无法控制/允许部分加载页面。

也许您可以抓取页面的内容然后显示它,但是在将它加载到UIWebView之前你会这样做,并且在你刮掉它之后,网页视图可能不是最好的无论如何要显示它的方式。

进行一些搜索html和网页抓取以查看该术语的含义。

或者,如果您了解网页内容结构,则可以在UIWebView加载时将javascript注入页面,并且javascript将阻止显示页面的其他部分(但如果weather-forecast.com更改结构他们的html未来你的javascript可能不再有用了)

无论哪种方式,对于初学者来说,两者似乎都有点过于复杂,但除非你能快速掌握并且能够胜任,但需要学习很多东西。

答案 2 :(得分:0)

您可以从应用中安装天气API,而不是从网站获取数据。这样会更快,也可能更容易,因为使用大多数天气API,您可以选择显示哪些信息。

有关如何安装天气API的更多信息,请访问this网站。

希望我能解决您的问题,托比