Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于JavaScript的UIWebView或WKWebkit?_Javascript_Ios_Wkwebview - Fatal编程技术网

用于JavaScript的UIWebView或WKWebkit?

用于JavaScript的UIWebView或WKWebkit?,javascript,ios,wkwebview,Javascript,Ios,Wkwebview,我想加载一个请求的网页并访问DOM元素,以从其中一个节点返回一个值。我有一些JavaScript可以做到这一点。问题是哪种方法是将值返回到我的应用程序的最佳方法。 我看到UIWebView有一个功能 stringByEvaluatingJavaScriptFromString 而WKWebKit具有以下功能 func evaluateJavaScript(javaScriptString:String!,completionHandler:((AnyObject!,NSError!)->Void

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

stringByEvaluatingJavaScriptFromString

而WKWebKit具有以下功能

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


它们之间的主要区别是什么,哪一个更好,为什么对我的用例来说

一般来说,WKWebView与UIWebView在几个方面有所不同

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

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

。这是在苹果文档中还是在你自己的个人知识中?文档显然注意到[WKWebView evaluateJavaScript]是异步的,但我现在找不到任何关于我上面提到的三点的权威性提及。但是他们确实是真的。实际上,您可以在工具中看到WebKit进程本身,例如,我甚至找不到它所说的异步。我想这就是为什么我们会这样:)