Есть несколько библиотек, но я не использовал ни одну из них в больших проектах, так что вы можете попробовать их:
-
Тем не менее, я думаю, что это что-то достаточно простое, чтобы вы могли попробовать сами. Я лично делал именно это, когда мне нужно было это сделать. Вы также можете создать простую библиотеку, которая соответствует вашим потребностям.
1. Выполните методы JS из Objective-C
На самом деле это всего лишь одна строчка кода.
NSString *returnvalue = [webView stringByEvaluatingJavaScriptFromString:@"your javascript code string here"];
Подробнее в официальной документации UIWebView .
2. Выполнение методов Objective-C из JS.
К сожалению, это немного сложнее, потому что не существует того же свойства (и класса) windowScriptObject, которое существует в Mac OSX, обеспечивающего полную связь между ними.
Тем не менее, вы можете легко позвонить с пользовательских URL-адресов javascript, например:
window.location = yourscheme://callfunction/parameter1/parameter2?parameter3=value
И перехватите его из Objective-C с помощью этого:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *URL = [request URL];
if ([[URL scheme] isEqualToString:@"yourscheme"]) {
// parse the rest of the URL object and execute functions
}
}
Это не так чисто, как должно быть (или при использовании windowScriptObject), но работает.
3. Слушайте собственные JS-события из Objective-C (например, событие готовности DOM)
Из приведенного выше объяснения вы видите, что если вы хотите это сделать, вам нужно создать некоторый код JavaScript, прикрепить его к событию, которое вы хотите отслеживать, и вызвать правильный window.location
вызов, который будет затем перехвачен.
Опять не чисто, как должно быть, но работает.