我一直在为此苦苦挣扎。我有一个有效的javascript命令,我从我的wkwebview发送:
document.getElementById('qlist-wrapper').getElementsByClassName('question-summary narrow').toString();
当我从 Safari 控制台键入此内容时,我返回
"[object HTMLCollection]"
但是当我尝试使用返回的对象时,我不知所措。我得到"EXC_BAD_ACCESS"(代码= 1,加上一个地址(。 有 4 个有效负载对象与"html:任何"对象相关联;他们都是0。下面是上下文中的代码:
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( 如何将 HtmlCollection 转换为数组?和
2(为什么当我尝试处理结果时会出现异常 我从WKWebView调用的javascript调用。
我解决了这个难题的第一块,所以我将在这里记录下来并关闭它。一旦我对JavaScriptCore有了更好的处理(我希望最终的解决方案就在哪里(,我将发布一个新问题并从这里交叉引用该问题/解决方案。
如果我在 Safari 的 Web 检查器控制台中键入以下内容,我会得到从 HtmlCollection 到 Array 的所需转换:
Array.prototype.slice.call(document.getElementById('qlist-wrapper').getElementsByClassName('question-summary narrow'));