#javascript #swift
#javascript #swift
Вопрос:
Вот код, который я использую, чтобы попытаться преобразовать длину элемента в HTML-файле веб-сайта в переменную в swift, чтобы я мог запускать функцию в зависимости от длины класса
self.viewController?.webBrowser?.evaluateJavaScript("document.getElementsByClassName('siteName').length") { (value, error) in
print("LENGTH IS ", value)
print("ERROR IS ", error)
let jsValue = value as? Int
if jsValue == 0{
self.waitClick()
}else{
self.startItemColor()
}
}
Независимо от того, какова длина, я получу 0 в качестве значения
Ответ №1:
Вероятно, DOM Element
еще не был готов, когда вы пытались получить к нему доступ. Вы должны move
использовать в своем коде didFinish
метод WKNavigationDelegate
протокола.
Итак, ваш UIViewController
должен выглядеть следующим образом:
class ViewController: UIViewController, WKNavigationDelegate {
override func viewDidLoad(){
super.viewDidLoad()
...
webBrowser.navigationDelegate = self
webBrowser.load(request)
...
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.getElementsByClassName('siteName').length") { (value, error) in
print("LENGTH IS ", value)
print("ERROR IS ", error)
let jsValue = value as? Int
if jsValue == 0{
self.waitClick()
} else {
self.startItemColor()
}
}
}
}
Также не забудьте включить App Transport Security
в вашем info.plist
вот так
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
В случае, если это не сработает, попробуйте отладить, почему. Вероятно, попробуйте вызвать метод в вашем JavaScript, который возвращает длину class="sitename"
элемента, а также это console.log(length)
, чтобы вы могли продолжить отладку и посмотреть, что происходит.
Ответ №2:
Похоже, что getElementsByClassName
возвращает массив, поэтому, если элемент с этим именем класса не найден, то массив будет иметь length
значение нуля. Он не получает length
самого элемента.