2012-12-28 17 views
14

utilizzare PhoneGap (Cordova 2,2)PhoneGap - link aperto in del browser

ho link come questo:

<a href="http://twitter.com/foobar" target="_blank">twitter</a> 

Su iOS - apre link nel browser (Safari)

Ma d' Android - si apre all'interno della webview (all'interno della mia app PhoneGap)

C'è un modo per far funzionare Android allo stesso modo di iOS?

risposta

27

Questo è quanto ho ottenuto che funziona utilizzando Cordova 2.2 e jQuery mobile su Android

Javascript:

$('.link').live('tap', function() { 
    url = $(this).attr("rel"); 
    loadURL(url); 
}); 

function loadURL(url){ 
    navigator.app.loadUrl(url, { openExternal:true }); 
    return false; 
} 

html:

<a href='#' class='link' rel='http://www.someurl.com'>Go Somewhere</a> 
+1

Fantastico sapere questo .. questo ha funzionato per me con Cordova 2.3, jQuery Mobile su Android. –

+0

Il live è deprecato. Diavolo, pensavo che fosse stato rimosso nelle versioni più recenti di JQ. Vorrei andare usando il metodo delegato o on ma stile di delega. In realtà, lo è anche il delegato, ma molto più di recente. –

+0

@Erik Reppen - è una risposta molto vecchia .. – someuser

6

Prova questo per Android:

function loadURL(url){ 
    navigator.app.loadUrl(url, { openExternal:true }); 
    return false; 
} 

Html:

<a click="loadURL('http://twitter.com/foobar')">twitter</a> 

Si può anche provare questo nel vostro config.xml:

<access origin="*twitter.com" browserOnly="true"/> 
+0

grazie! funziona per me –

+0

Ha funzionato per me con onclick anziché clic. La proprietà click non esiste o lo è? –

1

Io uso questo come regola generale:

$('a').live('tap',function(e){ 
    // if external link then open a browser 
    if(String($(this).attr('href')).substring(0,4)=='http' || String($(this).attr('href')).substring(0,5)=='https'){ 
     navigator.app.loadUrl($(this).attr('href'), { openExternal:true }); 
     e.stopPropagation(); 
     return false; 
    } 
}); 
+0

FYI, il confronto https è ridondante, sarà sempre valutato come true nella prima espressione. :) –

+0

in realtà, ha lo scopo di rilevare se si tratta di un collegamento esterno o meno. ma sì, hai ragione. :) – thedjaney

3

Se si desidera utilizzare come nella versione ios, con target="_blank" attributi:

$(document).on('tap', 'a[target="_blank"]', function(e){ 
    navigator.app.loadUrl(e.target.href, { openExternal: true }); 
    return false; 
}); 
1

Ho avuto lo stesso identico problema e ho notato che la maggior parte delle risposte sono confuse con piattaforme diverse. La soluzione funziona per me è Detail Explanation for different platforms

+0

Si prega di modificare la risposta in modo da fornire tutto il testo pertinente qui e fornire il collegamento come informazioni di backup più dettagliate. Ciò mantiene anche la risposta utile anche se tali collegamenti non sono più validi – Anthon

0

questo ha funzionato per me su ios

    $("a[target='_blank']").on('tap touch click',function(e){ 
         e.stopPropagation(); 
         e.preventDefault(); 
         window.open($(this).attr('href'), "_system"); 
         return false; 
        }); 
4

Il link fornito da user1879822 era in realtà la più utile per me: https://build.phonegap.com/blog/access-tags

In sintesi, PhoneGap ha una whitelist di URL consentiti all'interno del suo file config.xml. Questo significa che se si ha una voce come questa ...

<access origin="*" /> 

... tenterà di aprire tutti i link all'interno proprio WebView. Tuttavia, se si limita la whitelist alla sola URL specifica, qualsiasi collegamento a un URL non in quell'elenco si aprirà automaticamente in un browser esterno, non all'interno della propria webview locale. Per esempio se si vincola solo a questo ...

<access origin="http://127.0.0.1*" /> 

... poi il link Twitter indicato nella domanda iniziale dovrebbe aprire in una nuova browser esterno.

1

Anche se questa domanda è stato chiesto qualche tempo fa volevo informarvi sulla seguente voce blod che mi ha aiutato:

https://build.phonegap.com/blog/access-tags

in Android tutto quello che dovevo per era di unwhitelist mio dominio specificato . Quindi nel mio file config.xml non ne ho affatto.

0

Navigatore per opere telefoniche!

handler: function (btn, evt) { 
loadURL('http://www.google.com'); 
} 

...

function loadURL(url){ 
navigator.app.loadUrl(url, { openExternal:true }); 
return false; 
} 
-1

di lavoro utilizzando PhoneGap 3,5

<a href="javascript:loadURL('http://www.lavidaenbinario.com');" class="link ">Example</a> 

function loadURL(url){ 
    navigator.app.loadUrl(url, { openExternal:true }); 
    return false; 
} 
Problemi correlati