ios - app - ¿Abrir enlaces en Safari en lugar de UIWebVIew?
wkwebview ios (7)
Tengo una aplicación con UIWebView
dentro de UIViewController
. Puedo cargar HTML de un servicio web como una cadena como esta:
self.webView loadHTMLString:_string baseURL:nil
¿Es posible que los enlaces HTML de esta cadena se abran en el navegador y no en UIWebView en mi aplicación? ¿Cómo puedo hacer esto?
Lo he intentado en el UIViewController que "aloja" el UIWebVIew:
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
return YES;
}
No parece estar funcionando ...
¿Algunas ideas?
¿Ha establecido el delegado de UIWebView
en su UIViewController
? No hay nada obviamente mal con su código, por lo que puedo ver, por lo que es probable que sea algo así.
Sí, en tu etiqueta de hipervínculo agrega
target="blank"
Y un signo de interrogación estará bien, gracias
Establezca el delegado de UIWebView en su UIViewController luego de usar este método UIWebview y verifique la condición, por ejemplo, ahora la URL actual de la vista web es google.com, si supone que hizo clic en gmail, la url contiene la cadena con gmail. Use el siguiente método para abrir un navegador Safari y cargar automáticamente esa url.
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( inType == UIWebViewNavigationTypeLinkClicked ) {
NSURL *url = [inRequest URL];
if ([[url absoluteString] rangeOfString:@"gmail"].location == NSNotFound) {
[[UIApplication sharedApplication] openURL:[inRequest URL]];
return NO;
}
}
return YES;
}
Si ya configuraste correctamente el UIWebViewDelegate, simplemente haciendo
self.webView loadHTMLString:_string baseURL:nil
self.webView.delegate = self;
Deberia trabajar
Agregar esto en clase ...
@interface yourViewController : UIViewController
<UIWebViewDelegate>
Agregar esto en la vista cargó
- (void)viewDidLoad
{
[description loadHTMLString:string baseURL:nil];
description.delegate = self;
}
Agregue esto en su archivo .m
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( inType == UIWebViewNavigationTypeLinkClicked ) {
[[UIApplication sharedApplication] openURL:[inRequest URL]];
return NO;
}
return YES;
}
Nota:
UIWebView *description;
@synthesize description;
¡Entonces funcionará perfectamente de la manera que te mereces ...! :)
Agregue esta línea (self.webview.delegate = self;)
Por ejemplo en viewController.m
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[self.webview loadHTMLString:htmlString baseURL:nil];
self.webview.delegate = self;
Apple presentó un Controlador de Safari View en iOS 9. Safari View Controller ofrece todas las funciones que el usuario espera de Safari en su aplicación sin tener que abandonarla.
Primero tenemos que importar los servicios de Safari
#import <SafariServices/SafariServices.h>
Para el objetivo C:
NSString *yourUrl = @"http://yourURL";
SFSafariViewController *svc= [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString: yourUrl]];
[self presentViewController:svc animated:YES completion:nil];
Para Swift: -
let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
self.presentViewController(svc, animated: true, completion: nil)