Sono andato a utilizzare UIWebView per visualizzare il contenuto dinamico, invece di farlo in modo nativo utilizzando elementi dell'interfaccia utente. È possibile attivare le funzioni di app native semplicemente premendo i link all'interno di UIWebView? Esempio: colpire un collegamento che poi cambia visualizzazione corrente?Un UIWebView può interagire (comunicare) con l'app?
risposta
Sì, è possibile. Nel codice HTML, si scrive un JS per caricare un URL con uno schema falso come
window.location = "request_for_action://anything/that/is/a/valid/url/can/go/here";
Poi, nel codice di iOS, assegnare un delegato per la vostra WebView, e nel vostro delegato, gestire
webView:shouldLoadWithRequest:navigationType
con qualcosa come
if([request.URL.scheme isEqualToString: @"request_for_action"])
{
// parse your custom URL to extract parameter, use URL parts or query string as you like
return NO; // return NO, so webView won't actually try to load this fake request
}
-
Solo una parte, si può fare il contrario, lasciare che iOS co de richiamare alcuni codici JS nel tuo html per utilizzando
NSString* returnValue = [self.webView stringByEvaluatingJavaScriptFromString: "someJSFunction()"];
Sì! Quando l'utente preme un collegamento, ne viene a conoscenza nel delegato della vista Web e può quindi eseguire tutto ciò che desidera. Roba potente può essere fatto in questo modo.
Il delegato della vista Web viene inviato webView:shouldStartLoadWithRequest:navigationType:
. Analizzi cosa è successo e rispondi come desideri. Per evitare che la visualizzazione Web provi a seguire il collegamento (che potrebbe essere completamente falso, dopotutto), basta restituire NO.
In questo esempio dall'app TidBITS News, ho un collegamento nella pagina Web che utilizza uno schema play:
completamente inventato. Rilevo che nel delegato and play:
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)r
navigationType:(UIWebViewNavigationType)nt {
if ([r.URL.scheme isEqualToString: @"play"]) {
[self doPlay:nil];
return NO;
}
if (nt == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:r.URL];
return NO;
}
return YES;
}
Implementare il metodo webView:shouldStartLoadWithRequest:navigationType:
UIWebViewDelegate
.
Gestire navigationType e la richiesta in base alle esigenze.
Ho impostato il delegato e implementato i metodi dei delegati di uiwebview. Ma nessuno dei miei metodi delegati viene chiamato quando clicco su alcuni contenuti di uiwebview. Non c'è callback. Cosa dovrebbe essere fatto? – iPhoneDeveloper
@iPhoneDeveloper Dovresti pubblicare la tua domanda con tutti i dettagli rilevanti. – rmaddy
- 1. È possibile interagire con UIWebView senza toccare?
- 2. Silverlight può comunicare con uno strumento MIDI?
- 3. un servizio Android può fornire due interfacce con cui comunicare?
- 4. Interagire con un'immagine .svg
- 5. Interagire con ffmpeg da un programma .NET?
- 6. Un modo per comunicare con WebView in Android?
- 7. Come comunicare con un dispositivo USB sotto Windows e Java?
- 8. Semplici modi per interagire con i servizi?
- 9. Interagire con SVN da appengine
- 10. Interagire con bash da python
- 11. Come interagire con l'API Telegram
- 12. Invia un modulo in UIWebView
- 13. Come comunicare con un dispositivo USB?
- 14. Servizio di amministrazione: registra l'utente nel desktop, genera un processo che può interagire con il desktop
- 15. Come interagire con Spring bean Handle
- 16. Interagire con un'applicazione console Windows tramite Python
- 17. Interagire con classi C++ da Swift
- 18. Python non può comunicare con il sottoprocesso di un server Minecraft
- 19. Come far interagire automaticamente Fabric (anziché interagire con l'utente) con i comandi della shell? Combinare con pexpect?
- 20. Come può un'applicazione C# Windows Console comunicare se viene eseguita in modo interattivo
- 21. Interagire con la figura complessa in iOS
- 22. Come interagire con background.js dal popup?
- 23. Python: interagire con il data warehouse complesso
- 24. Interagire con codice java da C#
- 25. Usa C# per interagire con Windows Update
- 26. Interagire con iFrame utilizzando Splinter/selenio [Python]
- 27. Come interagire con UITableView in UIViewController?
- 28. Interagire con le pagine Web in C#
- 29. Come interagire con un altro browser Android (url)
- 30. Come caricare un swf e interagire con esso?
Sembra esattamente quello che ho bisogno di realizzare. Ma non riesco a capire dove metto questo metodo? Grazie per la risposta descrittiva, a proposito! –
Lo metti dovunque è il delegato di UIWebView! – matt
Alwesome, funziona! :) Un'altra domanda: perché quando faccio clic sul link con schema URL predefinito, l'app reindirizza a Safari e tenta di aprirlo? –