【发布时间】:2018-02-13 21:01:24
【问题描述】:
我的应用程序使用 WKWebView 来呈现 html 字符串。 WkWebView 嵌入在滚动视图中,因为我还有其他几个元素(例如按钮、表格视图)。因此,我需要计算 WkWebvView 内容的大小,为此我使用 evaluateJavaScript(“document.body.scrollHeight”, completionHandler: 方法。 每当我在 html 字符串中嵌入推文时,都会错误地计算内容高度,并且我的 webview 会削减它的高度。
嵌入推文的部分html字符串如下所示:
<blockquote class=\"twitter-tweet\" data-lang=\"en\"><p><a
href=\"https://twitter.com/hashtag/SYRIA?src=hash\">#SYRIA</a> Admiral Essen frigate launched <a href=\"https://twitter.com/hashtag/Kalibr?src=hash\">#Kalibr</a> cruise missiles against ISIS objects near Deir ez-Zor <a href=\"https://BLABLA*\">pic.twitter.com/azHAIii07g</a></p><p>— Минобороны России (@mod_russia) <a href=\"https://twitter.com/mod_russia/status/905007557554700288\">September 5, 2017</a></p></blockquote><p><script src=\"https://platform.twitter.com/widgets.js\"></script>
(BLABLA* 实际上是 t.co/azHAIii07g,由于 stackoverflow 规则,我不得不替换它)
此 twitter 代码中是否缺少某些内容,或者我应该在 webview 方法中设置一些内容?
我尝试从这篇文章中实施解决方案:iOS Calculate correct WKWebview height for html string with embeded tweet,但没有成功,或者至少我能找到答案。
有什么建议吗??
更新: 我破解了一点,发现了可怕的解决方法,但这是解决问题所在的一个很好的线索。 这是我用来计算高度的完整函数:
`func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
self.webViewx.evaluateJavaScript("document.readyState", completionHandler: {
[weak self] (complete, error) in
if complete != nil { self?.webViewx.evaluateJavaScript("document.body.offsetHeight", completionHandler: {
[weak self] (height, error) in
})
}`
如果我说:
`DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+1, execute: {
self?.webViewx.evaluateJavaScript("document.body.offsetHeight", completionHandler: {
[weak self] (height, error) in
print("HEIGHT AFTER 1 sec", height)
})
})`
1 秒后我得到正确的高度。现在,在正确的时间后获得高度更新的方法是什么。
另外,请注意,如果我嵌入了 facebook 或 instagram 帖子,则一切正常,并且 webview 高度得到正确计算。
【问题讨论】:
标签: javascript ios twitter webview wkwebview