UIWebView или WKWebkit за JavaScript?

Искам да заредя заявена уеб страница и да получа достъп до елементи на DOM, за да върна стойност от един от възлите. Имам някакъв JavaScript, който прави това. Въпросът е кой е най-добрият метод за връщане на стойността на моето приложение. Виждам, че UIWebView има функция

stringByEvaluatingJavaScriptFromString

и WKWebKit има функция

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

Каква е основната разлика между тях и кое е по-добро и защо за моя случай на употреба?


person RyanTCB    schedule 25.07.2015    source източник


Отговори (1)


Като цяло WKWebView е различен от UIWebView по няколко начина

  • Той използва същия Javascript двигател, който използва Safari, така че е значително по-бърз при оценка на Javascript (използва компилация точно навреме, за да компилира вашия скрипт в машинен код, преди да го изпълни)
  • Поддържа се само на iOS8 и по-нови, така че няма да работи на по-стари платформи
  • Той работи в отделен процес, така че сривовете в кода на WKWebView няма да свалят цялото ви приложение.

За да отговори на конкретния ви въпрос, UIWebView stringByEvaluatingJavaScriptFromString блокира приложението ви, докато чака кодът ви да се изпълни, и така е синхронен. За разлика от това, тъй като кодът на WKWebView се изпълнява в друг процес, трябва да взаимодействате с него асинхронно; изпращате вашата заявка за изпълнение на Javascript към процеса WebKit и вашият манипулатор за завършване се изпълнява, когато оценката на JavaScript приключи и резултатите са готови. Междувременно нишката, извикала evaluateJavaScript, ще продължи да изпълнява друг код.

person KJ Tsanaktsidis    schedule 25.07.2015
comment
Страхотно обяснение. Това в документите на Apple ли е или вашите лични познания? - person RyanTCB; 25.07.2015
comment
В документите очевидно се отбелязва, че [WKWebView evaluateJavaScript] е асинхронен, но не мога да намеря никакво авторитетно споменаване на трите точки, които направих по-горе в момента. Те обаче определено са верни. Всъщност можете да видите самите процеси на WebKit в инструменти, например - person KJ Tsanaktsidis; 25.07.2015
comment
Дори не мога да намеря къде пише, че е асинхронен. Предполагам, че затова идваме на SO :) - person RyanTCB; 25.07.2015