gpt4 book ai didi

ios - 如何只显示网页的一部分? UIWebView Swift

转载 作者:行者123 更新时间:2023-11-30 12:09:02 25 4
gpt4 key购买 nike

我正在 Swift 中开发我的 iOS 应用程序,并且我已经完成了我的 Android 应用程序。在 Android 上,我已经找到了仅显示网页的一部分的解决方案。这也是我想对我的 iOS 应用程序做的事情。

所以,对于那些熟悉 Android 开发的人来说,正是这个解决方案帮助了我:

How to display a part of the webpage on the 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 类会更容易、更优雅、更短。

可以这样做吗?很高兴得到有帮助的答案。

更新:

我找到了一个可能对我有帮助的解决方案,但不知何故它不起作用。因为该代码已有 2.5 年历史,我已弃用该代码,因此我必须将代码更新为我自己的代码。也许在约束部分,可能会有错误,但根本没有错误。尽管我想要打印的所有行都已打印,但背景颜色也不可见。也许您可以查看我的代码,如果对您有帮助,请将其与我找到的解决方案进行比较:How to only display part of web page content (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)

关于ios - 如何只显示网页的一部分? UIWebView Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46297886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com