用于JavaScript的UIWebView或WKWebkit?

时间:2015-07-25 10:31:49

标签: javascript ios wkwebview

我想加载请求的网页并访问DOM的元素以从其中一个节点返回值。我有一些JavaScript可以做到这一点。问题是将值返回到我的应用程序的最佳方法。  我看到UIWebView有一个功能

stringByEvaluatingJavaScriptFromString

和WKWebKit有功能

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

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

1 个答案:

答案 0 :(得分:8)

通常,WKWebView在某些方面与UIWebView不同

  • 它使用了Safari使用的相同Javascript引擎,因此它在Javascript评估时速度相当快(它只是及时编译,以便在运行之前将脚本编译为机器代码)。
  • 仅在iOS8及更高版本上受支持,因此无法在较旧的平台上使用
  • 它在一个单独的进程中运行,因此WKWebView代码中的崩溃不会导致整个应用程序崩溃。

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