我在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)