如何只显示部分网页内容(swift)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何只显示部分网页内容(swift)相关的知识,希望对你有一定的参考价值。

我是编码的新手(完全没有任何编程语言的背景)。我正在努力学习。我想创建一个简单的天气应用程序,一旦用户进入城市,就会在文本中显示天气信息。我从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.
    }    
}
}
答案

这是一个简单的视图控制器的例子,它只加载网站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
    }

}

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

另一答案

您将无法轻松地做到这一点 - UIWebView没有任何API来公开它正在加载的网页的结构,也没有控制/允许部分加载页面。

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

做一些搜索HTML和网页抓取,看看该术语的含义。

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

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

另一答案

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

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

希望我解决了你的问题,托比

以上是关于如何只显示部分网页内容(swift)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 webview 只显示网页的一部分

Html加载已经完全下载,但是网页只显示了一半内容,怎么半?

iframe 内显示的网页 只显示改网页的某一部分!

如何自动选定一个网页显示的全部内容到复制到剪贴板中?

我可以立即在其他地方移动片段而不重新创建任何内容

argparse 代码片段只打印部分日志