如何仅显示网页的一部分?uiwebview swift



我在Swift中正在处理iOS -App,并且我已经完成了Android -App。在Android上,我已经找到了一个解决方案,可以显示网页的 。这也是我也想对iOS-app做的。

因此,对于那些熟悉Android开发的人,正是这种解决方案对我有帮助:

如何在WebView Android

上显示网页的一部分

,但我以某种方式问了我的问题,即使您没有Android开发的经验,也可以回答这个问题!

您可以假设,就像这个Android解决方案一样,我的网页是darebee.com,在这种情况下,也许在锻炼页面上,所以我确切地说:

https://darebee.com/wods.html

我想显示只有一个div显示页面的内容,在这种情况下:

<div class="ja-products-wrapper products wrapper grid products-grid cols-3">

这是我的代码到现在(工作,但显示完整页):

override func viewDidLoad() {
    super.viewDidLoad()
    let url = URL (string: "https://darebee.com/wods.html")
    let request = URLRequest(url: url!)
    webview.loadRequest(request)
}

我知道也有一种隐藏网页的某些部分的方法,但是仅显示一个 div -class。

有可能这样做吗?得到有用的答案会很高兴。

更新:

我找到了一种可能对我有帮助的解决方案,但是它不起作用。因为代码已有2,5年的历史,所以我弃用了这一点,所以我必须自己更新代码。也许在约束部分上,可能会有一个错误,但根本没有错误。同样,尽管我想打印的所有线条都打印出来,但背景色也不可见。也许您可以查看我的代码,如果它有助于您,请将其与我发现的解决方案进行比较:如何仅显示网页内容的一部分(Swift)

这是我的代码:

import UIKit
import JavaScriptCore
import WebKit
class ViewController: UIViewController {
private weak var webView: WKWebView!

@IBOutlet weak var vclabel: UIView!
private var userContentController: WKUserContentController!

override func viewDidLoad() {
    super.viewDidLoad()
    createViews()
    print("no prob1")
    loadPage(urlString: "https://dribbble.com/", partialContentQuerySelector: ".dribbbles.group")
    print("no prob2")
}
private func createViews() {
    userContentController = WKUserContentController()
    let configuration = WKWebViewConfiguration()
    configuration.userContentController = userContentController
    let webView = WKWebView(frame: view.bounds, configuration: configuration)
    webView.translatesAutoresizingMaskIntoConstraints = false
    let color1 = hexStringToUIColor(hex: "#FFFFFF")
    webView.backgroundColor = color1
    if (webView.backgroundColor == color1){
        print("color1")
    }
    let leadingConstraint = NSLayoutConstraint(item: webView, attribute: NSLayoutAttribute.leading, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.leading, multiplier: 1, constant: 0)
    let topConstraint = NSLayoutConstraint(item: webView, attribute: NSLayoutAttribute.top, relatedBy: NSLayoutRelation.equal, toItem: topLayoutGuide, attribute: NSLayoutAttribute.bottom, multiplier: 1, constant: 0)
    let trailingConstraint = NSLayoutConstraint(item: webView, attribute: NSLayoutAttribute.trailing, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.trailing, multiplier: 1, constant: 0)
    let bottomConstraint = NSLayoutConstraint(item: webView, attribute: NSLayoutAttribute.bottom, relatedBy: NSLayoutRelation.equal, toItem: vclabel, attribute: NSLayoutAttribute.top, multiplier: 1, constant: 0)
    view.addSubview(webView)
NSLayoutConstraint.activate([leadingConstraint, topConstraint, trailingConstraint, bottomConstraint])
    self.webView = webView
}
private func loadPage(urlString: String, partialContentQuerySelector selector: String) {
    userContentController.removeAllUserScripts()
    print("load")
    let userScript = WKUserScript(source: scriptWithDOMSelector(selector: selector),
                                  injectionTime: WKUserScriptInjectionTime.atDocumentEnd,
                                  forMainFrameOnly: true)
    userContentController.addUserScript(userScript)
    let url = NSURL(string: urlString)!
    webView.load(NSURLRequest(url: url as URL) as URLRequest)
    print("loaded")
}
private func scriptWithDOMSelector(selector: String) -> String {
    print("DOMSelector")
    let script =
        "var selectedElement = document.querySelector('(selector)');" +
    "document.body.innerHTML = selectedElement.innerHTML;"
    return script
}
func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
    if (cString.hasPrefix("#")) {
        cString.remove(at: cString.startIndex)
    }
    if ((cString.characters.count) != 6) {
        return UIColor.gray
    }
    var rgbValue:UInt32 = 0
    Scanner(string: cString).scanHexInt32(&rgbValue)
    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}
}

这是我的输出:

Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
color1
no prob1
load
DOMSelector
loaded
no prob2

我只是不知道我该怎么做才能解决这个问题。那里有人可以以任何方式帮助我?

使用LoadHtmlString这样:

 let requestURL: URL? = yourWebView.request().url
 var error: Error?
 let page = try? String(contentsOf: requestURL, encoding: String.Encoding.ascii)
 yourWebView.loadHTMLString(page!, baseURL: requestURL)

相关内容

  • 没有找到相关文章

最新更新