JavaScript 的 UIWebView 或 WKWebkit?

UIWebView or WKWebkit for JavaScript?

我想加载请求的网页并访问 DOM 的元素到 return 来自其中一个节点的值。我有一些 JavaScript 可以做到这一点。问题是 return 我的应用价值的最佳方法。 我看到 UIWebView 有一个函数

stringByEvaluatingJavaScriptFromString

WKWebKit 有函数

func evaluateJavaScript(javaScriptString: String!, completionHandler: ((AnyObject!, NSError!) -> Void)!)

嗯,它们之间的主要区别是什么?哪个更好?为什么适合我的用例?

总的来说,WKWebView 在几个方面与 UIWebView 不同

  • 它使用与 Safari 相同的 Javascript 引擎,因此它在 Javascript 评估时要快得多(它使用即时编译在 运行 之前将您的脚本编译为机器代码宁它)
  • 它仅在 iOS8 及更高版本上受支持,因此不适用于旧平台
  • 它 运行 在一个单独的进程中,因此 WKWebView 代码中的崩溃不会导致整个应用崩溃。

为了回答您的具体问题,UIWebView stringByEvaluatingJavaScriptFromString 在等待您的代码 运行 时阻止您的应用程序,因此是同步的。相比之下,因为 WKWebView 代码是 运行ning 在另一个进程中,你必须与它异步交互;您将 运行 Javascript 的请求提交给 WebKit 进程,当 JavaScript 评估完成且结果准备就绪时,您的完成处理程序为 运行。与此同时,调用evaluateJavaScript的线程会继续执行其他代码。