用于 JavaScript 的 UIWebView 或 WKWebkit?
Posted
技术标签:
【中文标题】用于 JavaScript 的 UIWebView 或 WKWebkit?【英文标题】:UIWebView or WKWebkit for JavaScript? 【发布时间】:2015-07-25 10:31:49 【问题描述】:我想加载一个请求的网页并访问 DOM 的元素以从其中一个节点返回一个值。我有一些 javascript 可以做到这一点。问题是将值返回到我的应用程序的最佳方法。 我看到 UIWebView 有一个功能
stringByEvaluatingJavaScriptFromString
WKWebKit 有功能
func evaluateJavaScript(javaScriptString: String!, completionHandler: ((AnyObject!, NSError!) -> Void)!)
那么它们之间的主要区别是什么,哪个更好,为什么对于我的用例?
【问题讨论】:
【参考方案1】:总的来说,WKWebView 与 UIWebView 在一些方面有所不同
它使用与 Safari 相同的 Javascript 引擎,因此它在 Javascript 评估时要快得多(它使用即时编译将您的脚本编译为机器代码,然后再运行它) 仅支持 ios8 及以上版本,因此不适用于旧平台 它在单独的进程中运行,因此 WKWebView 代码中的崩溃不会导致您的整个应用崩溃。为了回答您的具体问题,UIWebView stringByEvaluatingJavaScriptFromString
在等待您的代码运行时会阻止您的应用,因此是同步的。相比之下,因为 WKWebView 代码是在另一个进程中运行的,所以你必须与它异步交互;您将运行 Javascript 的请求提交给 WebKit 进程,当 JavaScript 评估完成并准备好结果时,您的完成处理程序就会运行。同时,调用evaluateJavaScript
的线程会继续执行其他代码。
【讨论】:
精湛的解释。这是在苹果文档中还是您自己的个人知识中? 文档显然注意到 [WKWebView evaluateJavaScript] 是异步的,但我现在找不到任何关于我上面提出的三点的权威提及。他们绝对是真的。您实际上可以在仪器中看到 WebKit 进程本身,例如 我什至找不到它说异步的地方。我想这就是我们来到 SO 的原因 :)以上是关于用于 JavaScript 的 UIWebView 或 WKWebkit?的主要内容,如果未能解决你的问题,请参考以下文章
UIPageViewControlerDataSource 和 UiWebView 用于在页面上显示
UIWebView 能否用于在 iOS 应用中查看和编辑 XML 文档