run guide descargar javascript ios cordova

javascript - guide - cordova publish ios



¿Cómo puedo abrir un enlace externo en Safari, no UIWebView de la aplicación? (10)

Tengo una aplicación Phonegap (cordova) en la que quiero cargar algunas páginas web externas en el PhoneView WebView y tengo otras páginas web externas que quiero cargar en safari cuando el usuario las activa.

Normalmente, la mayoría de las personas tiene el problema de querer abrir un enlace externo en WebView. Establecer OpenAllWhitelistURLsInWebView a YES (en Cordova.plist / Phongap.plist) resuelve ese problema.

Pero no quiero abrir todos los enlaces del WebView, solo algunos.

Esperaba poder llamar a window.open(''http://someexternalsite'') para abrir en Safari y window.parent.location.href = ''http://mysite'' para abrirlo en WebView.

¿Alguna idea de cómo hacer esto?


  1. Agregue target = "_ blank" a sus enlaces. es decir:

    <a href="http://www.brandonbrotsky.com/" target="_blank"></a>

  2. Asegúrese de que el acceso tenga un origen de * /> en su config.xml (asegúrese de que sea el que está en la raíz del directorio de la aplicación, encima de la carpeta www, es decir:

    <access origin="*" />

  3. Agregue el siguiente código a MainViewController.m

    - (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = [request URL]; // Intercept the external http requests and forward to Safari.app // Otherwise forward to the PhoneGap WebView if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]) { [[UIApplication sharedApplication] openURL:url]; return NO; } else { return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; } }

Hice un video rápido explicando cómo solucionar este problema:

http://www.youtube.com/watch?v=zqbjXSnAR-Q&feature=c4-overview&list=UUefS6KLvFQVjhmL6hiBq4Sg

¡Espero eso ayude!


Esto es lo que funciona para mí basado en la respuesta de @TDeBailleul. Básicamente, cualquier enlace que tenga un sufijo de PDF, O si es una página específica que quiero abrir en Safari, O si no es una página dentro de www.example.com/* (un enlace externo) se abrirá en una nueva ventana:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // Open PDF files, Specific Pages, and External Links (not beginning with http://www.example.com) in Safari.app if ( (navigationType == UIWebViewNavigationTypeLinkClicked) && ([[[request URL] absoluteString] hasSuffix:@"pdf"] || [[[request URL] absoluteString] hasPrefix:@"http://www.example.com/specific-page.php"] || ![[[request URL] absoluteString] hasPrefix:@"http://www.example.com"]) ) { [[UIApplication sharedApplication] openURL:request.URL]; return NO; } return YES; }

Espero que esto ayude a otros!


Esto funciona para mí, ayuda mucho

-(void)viewDidLoad { [super viewDidLoad]; //////////////////////// NSString *urlAddress = @"http://www.playbuzz.org/"; //NSURL *myURL = [NSURL URLWithString:urlAddress]; myWebview.delegate = (id)self; [myWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlAddress]]]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // open External Links (not beginning with www.playbuzz.org/ in Safari.app if ( (navigationType == UIWebViewNavigationTypeLinkClicked) && ( ![[[request URL] absoluteString] hasPrefix:@"http://www.playbuzz.org/"]) ) { [[UIApplication sharedApplication] openURL:request.URL]; return NO; } //open Internal links in uiwebview return YES; }`


La forma correcta de hacerlo es usar el complemento inAppBrowser

instalarlo usando la CLI de cordova:

cordova plugin add org.apache.cordova.inappbrowser

Luego, para abrir un enlace en Safari, simplemente use:

window.open(''http://apache.org'', ''_system'');

Hay una versión más nueva del complemento alojado en npm

para instalarlo desde la CLI de cordova:

cordova plugin add cordova-plugin-inappbrowser

Para abrir el sitio web en safari puede usar

cordova.InAppBrowser.open(''http://apache.org'', ''_system'');

o, si desea continuar utilizando window.open como la versión anterior, puede hacer esto en el evento ready del dispositivo:

document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { window.open = cordova.InAppBrowser.open; }


Probado en cordova 2.4 + iOS

use "_system" y no necesita actualizar ninguna configuración

docs.phonegap.com/en/2.3.0/…

objetivo: el objetivo para cargar la URL en (Cadena) (Opcional, Predeterminado: "_self")

_self - se abre en Cordova WebView si url está en la lista blanca, de lo contrario se abre en InAppBrowser _blank - siempre se abre en el sistema InAppBrowser _system - siempre se abre en el navegador web del sistema


Puede (a partir del phonegap 1.5.0) usar:

<a href="some://external/url" target="_blank">Click Me</a>

Esto debería causar que Phonegap inicie el navegador nativo.

Creo que lo que user868766 se refería era que para que lo anterior funcione, necesita que la url externa esté en la lista blanca. La aplicación en la que he estado trabajando abrió la fuente de noticias en el navegador nativo, por lo que usamos * en la lista blanca para garantizar que no descartamos ninguna fuente.

Espero que ayude.


Si los enlaces que desea abrir en safari contienen una cadena común, puede usar la siguiente parte del código.

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = [request URL]; // Intercept the external http requests and forward to Safari.app // Otherwise forward to the PhoneGap WebView if ([[url scheme] isEqualToString:@"SCHEME"]) { [[UIApplication sharedApplication] openURL:url]; return NO; } else { return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; } }

Este código colocado en AppDelegate.m abrirá todas las URL que usen el ESQUEMA especificado en Safari.

Me temo que eso es todo lo que se me ocurrió.

Espero que esto ayude

ACTUALIZAR:

El código debe colocarse en MainViewControler, al menos para cordova 2.2.0.

El método se comenta inicialmente. Tuve que usarlo para redirigir enlaces de mapas de Google:

NSRange isGoogleMaps = [[url absoluteString] rangeOfString:@"maps.google.com" options:NSCaseInsensitiveSearch]; NSRange isGoogleTerms = [[url absoluteString] rangeOfString:@"terms_maps.html" options:NSCaseInsensitiveSearch]; if(isGoogleMaps.location != NSNotFound || isGoogleTerms.location != NSNotFound ) { [[UIApplication sharedApplication] openURL:url]; return NO; } else return [super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];


Simplemente capture todos los enlaces en su javascript que tengan target="_blank" , y páselos a window.open con el parámetro ''_system''. Esto funcionará en iOS y Android.

$(document).on(''click'', ''a[target="_blank"]'', function(ev) { var url; ev.preventDefault(); url = $(this).attr(''href''); window.open(url, ''_system''); });


iside el xcode

// Código de lugar en /Classes/MainViewController.m

- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)­navigationType { NSURL *url = [request URL]; // Intercept the external http requests and forward to Safari.app // Otherwise forward to the PhoneGap WebView if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]) { [[UIApplication sharedApplication] openURL:url]; return NO; } else { return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; } }


si quieres abrir una url externa en safari, creo que esto es útil:
Esta es la solución garantizada% 100 si está utilizando phonegap - Probado en ios6.
para abrir url externo en safari hacer lo siguiente:

1-agregue su enlace en Host externo (lista blanca). por ejemplo, http://google.com
2-en Cordova.plist o Phonegap.plist, cambie "OpenAllWhitelistURLsInWebView" de "Sí" a "No"
3-en su aplicación agregue (target = "_ blank") a su enlace
ejemplo

<a href="http://google.com" target="_blank">Google.com</a>


Gracias.