Existem algumas bibliotecas, mas não usei nenhuma em grandes projetos, então você pode querer experimentá-las:
-
No entanto, acho que é algo simples o suficiente para que você possa experimentar. Eu pessoalmente fiz exatamente isso quando precisei fazer isso. Você também pode criar uma biblioteca simples que atenda às suas necessidades.
1. Execute métodos JS de Objective-C
Esta é realmente apenas uma linha de código.
NSString *returnvalue = [webView stringByEvaluatingJavaScriptFromString:@"your javascript code string here"];
Mais detalhes na documentação oficial do UIWebView .
2. Execute métodos Objective-C de JS
Infelizmente, isso é um pouco mais complexo, porque não há a mesma propriedade windowScriptObject (e classe) que existe no Mac OSX, permitindo a comunicação completa entre os dois.
No entanto, você pode chamar facilmente a partir de URLs javascript personalizados, como:
window.location = yourscheme://callfunction/parameter1/parameter2?parameter3=value
E intercepte-o do Objective-C com este:
- (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
}
}
Isso não é tão claro quanto deveria (ou usando windowScriptObject), mas funciona.
3. Ouça eventos JS nativos de Objective-C (por exemplo, evento pronto para DOM)
A partir da explicação acima, você vê que se quiser fazer isso, você deve criar algum código JavaScript, anexá-lo ao evento que deseja monitorar e chamar a window.location
chamada correta para ser interceptada.
Novamente, não está limpo como deveria, mas funciona.