我有一个非常简单/容易的问题,但对java的经验绝对没有。我有一个WKWebView
,我希望使用javascript document.getElementById
获取网页的标题文字。
我试图获取标题的网页有以下代码:
<html>
<body>
<div class="toolbar">
<h1 id="pageTitle">Schedules</h1>
</div>
</body>
<html>
这段代码已删节,所以我为任何错误道歉。
然后我尝试使用:
访问Swift中的pageTitlefunc webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
webView.evaluateJavaScript("document.getElementById('pageTitle').value") { (result, error) -> Void in
if error != nil {
print(result)
}
}
}
结果是返回零。经过几个小时的搜索,我仍然不知道如何让它工作。任何帮助表示赞赏。
答案 0 :(得分:18)
您不需要使用javascript来检索页面标题。 WKWebView有一个title
属性,可以为您检索此内容
title
页面标题。 (只读)SWIFT
var title: String? { get }
WKWebView类符合此属性的键值观察(KVO)。
适用于iOS 8.0及更高版本。
答案 1 :(得分:0)
使用Node.textContent获取文本节点内容的正确副本。
webView.evaluateJavaScript("document.getElementById('pageTitle').textContent") { (result, error) -> Void in
if error != nil {
print(result)
}
}
答案 2 :(得分:0)
我使用了相同的代码段,并解决了问题...它只会打印结果,如果它&#34; nil&#34;!
尝试:
webView.evaluateJavaScript("document.getElementById('pageTitle').textContent") { (result, error) -> Void in
if error == nil {
print(result)
}
}
答案 3 :(得分:0)
在代码中出现错误时,代码会打印结果。当没有错误发生时,这不打印任何内容。
因此,将代码更改为此,一切正常。
func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
webView.evaluateJavaScript("document.getElementById('pageTitle').innerHTML") { (result, error) -> Void in
if error != nil {
print(error)
}
print(result)
}
}
答案 4 :(得分:0)
此代码适用于我:
webView.evaluateJavaScript("document.title').textContent") { (result, error) -> Void in
if error == nil {
print(result)
}
}
答案 5 :(得分:0)
如@SilkyPantsDan所述,如果您仅对title
感兴趣,则无需使用JS。首先,您开始观察:
override func viewDidLoad() {
super.viewDidLoad()
webView.addObserver(self, forKeyPath: #keyPath(WKWebView.title), options: .new, context: nil)
}
并在title
更新时处理您的逻辑:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "estimatedProgress" {
title = webView.title
}
}
最后,如果您支持iOS 8.0,则应该停止观察,因为在iOS 9.0之前不会自动删除观察者:
deinit {
webView.removeObserver(self, forKeyPath: "estimatedProgress")
webView.removeObserver(self, forKeyPath: "title")
}