【发布时间】:2017-10-10 09:14:03
【问题描述】:
我正在使用 Xcode 9.0 和 iOS 11。当用户点击链接时,我正在尝试执行 javascript 代码。 js 代码嵌入在 WKWebView 内的本地 html 网站中。
我尝试了许多建议,例如使用 webView.evaluateJavaScript("document.getElementsByClassName('panel-title').innerText") 或为 webview 设置不同的配置。
html 站点包含一个 PrivacyPolicy,用户可以在其中展开和折叠不同的部分
看起来像这样:
<main class="container">
<div>
<h1 id="datenschutzwbrerklrung">Datenschutz<wbr>erklärung</h1>
<p>Allgemein</p></div>
<div class="panel panel-default"><div class="panel-heading" role="tab" id="headingsection1" data-toggle="collapse" data-parent="#accordion" href="#section1">
<h4 class="panel-title">Allgemeiner Hinweis</h4></div><div id="section1" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingsection1"><div class="panel-body">
<p>Es ist uns ein ganz besonderes Anliegen, dass sich alle Nutzer unserer App wohl und sicher fühlen. Aus diesem Grund ist uns der Schutz Ihrer personenbezogenen Daten von höchster Wichtigkeit.
Bei der Erhebung, Verarbeitung und Nutzung halten wir uns selbstverständlich streng an die gesetzlichen Bestimmungen des Bundesdatenschutzgesetzes (BDSG) und des Telemediengesetzes (TMG).
Wir verarbeiten personenbezogene Daten zur Auftragsabwicklung. Bei berechtigtem Interesse rufen wir zum Zweck der eigenen Kreditprüfung ggf. Bonitätsinformationen von Auskunfteien ab.</p></div></div></div>
<br />
所以当用户点击“Allgemeiner Hinweis”时。下面的文字展开。这适用于 Mac 上的 Safari(必须激活 JavaScript)。但它在我的 WKWebView 中不起作用。 我当前的 WKWebView 配置如下所示:
var webView: WKWebView!
override func loadView() {
super.loadView()
let contentController = WKUserContentController()
let config = WKWebViewConfiguration()
config.preferences.javaScriptEnabled = true
config.preferences.javaScriptCanOpenWindowsAutomatically = true
config.selectionGranularity = .character
config.userContentController = contentController
webView = WKWebView()
webView.navigationDelegate = self
self.webView.customUserAgent = "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136"
view = webView
}
我也使用下面的委托方法。第一个 if 条件始终为假。对于第二个 if 语句错误,结果为 nil。
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("delegate")
webView.evaluateJavaScript("document.getElementsByClassName('panel-title').innerText") { (result, error) in
if error != nil {
print(result ?? "nix")
}
else {
print("Error: \(String(describing: error))")
}
}
webView.evaluateJavaScript("document.getElementsByClassName('panel-title')") { (result, error) in
if error != nil {
print("The result is: \(result ?? "nil")")
print("resut error: \(error!)")
}
else {
print("The Error: \(String(describing: error))")
}
}
我确定仍然缺少一些东西。 非常感谢任何帮助。
【问题讨论】:
-
我无法发布整个 javascript 部分,因为它有超过 3000 行代码。似乎还涉及一些查询。也许有人可以给我一些一般提示如何使这项工作
标签: javascript html ios