Получить [String] из [object HTMLCollection]
Я боролся с этим. У меня есть действующая команда javascript, которую я отправляю из моего wkwebview:
document.getElementById('qlist-wrapper').getElementsByClassName('question-summary narrow').toString();
Когда я набираю это с консоли Safari, я возвращаюсь
"[object HTMLCollection]"
Но когда я пытаюсь использовать возвращенный объект, я в растерянности. Я получаю "EXC_BAD_ACCESS" (код =1 плюс адрес). 4 объекта полезной нагрузки связаны с объектом html: Any; они все 0s. Вот код в контексте:
webView.evaluateJavaScript("document.getElementById('qlist-
wrapper').getElementsByClassName('question-summary narrow').toString();", completionHandler: { (html: Any, error: Error?) in
print("\(html)")
if let error = error {
print("\(error.localizedDescription)")
}
})
}
В конечном итоге моя цель - превратить коллекцию html в массив строк Swift. Как я могу это сделать? Я бы очень приветствовал решение JSON (возможно, с использованием Alamofire), но я упростил свой подход, чтобы сначала что-то заработало. (Я работал с Alamofire в прошлом, но не так много JSON). Если я попытаюсь посмотреть переменную перед печатью, я получу:
po html
error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0xfffffffffffffff8).
The process has been returned to the state before expression evaluation.
1 ответ
У меня действительно есть две проблемы в этом вопросе:
1) Как мне получить HtmlCollection, преобразованный в массив? а также
2) Почему я получаю исключения, когда пытаюсь работать с результатами моего вызова javascript из WKWebView.
Я решил первую часть этой головоломки, поэтому я задокументирую это здесь и закрою это. Как только у меня получится лучше справиться с JavaScriptCore (там, где я ожидаю окончательного решения), я опубликую новый вопрос и сделаю перекрестную ссылку на этот вопрос / решение.
Если я введу следующее в консоль Web Inspector в Safari, я получу желаемое преобразование из HtmlCollection в Array:
Array.prototype.slice.call(document.getElementById('qlist-wrapper').getElementsByClassName('question-summary narrow'));