web-dev-qa-db-fra.com

phonegap - lien ouvert dans le navigateur

J'utilise phonegap (Cordova 2.2) 

J'ai un lien comme ça:

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

Sur iOS - ouvre le lien dans le navigateur (Safari)

Mais sur Android - il s'ouvre dans la visualisation Web (dans mon application phonegap)

Existe-t-il un moyen de faire fonctionner Android de la même manière qu'iOS?

14
Pydev UA

Voici comment je l'ai fait fonctionner avec Cordova 2.2 et jQuery mobile sur 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>
27
someuser

Essayez ceci pour Android:

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

Html:

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

Vous pouvez aussi essayer ceci dans votre config.xml:

<access Origin="*Twitter.com" browserOnly="true"/> 
6
Majid Laissi

Le lien fourni par user1879822 était en fait le plus utile pour moi: https://build.phonegap.com/blog/access-tags

En résumé, PhoneGap dispose d'une liste blanche d'URL autorisées dans son fichier config.xml. Cela signifie que s'il y a une entrée comme celle-ci ... 

<access Origin="*" />

... il tentera d'ouvrir les liens all dans sa propre vue Web. Toutefois, si vous limitez votre liste blanche à des URL spécifiques uniquement, tout lien vers une URL not dans cette liste s'ouvrira automatiquement dans un navigateur externe, et non dans votre vue Web locale. Par exemple, si vous le contraignez uniquement à cela ...

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

... alors le lien Twitter mentionné dans la question initiale devrait s'ouvrir dans un nouveau navigateur externe.

4
greghmerrill

Si vous souhaitez utiliser comme dans la version ios, avec les attributs target="_blank":

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

Même si cette question a été posée il y a quelque temps, je voulais vous informer de l'entrée de blod suivante qui m'a aidé:

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

Sous Android, tout ce que je devais faire était de désélectionner mon domaine spécifié. Donc, dans mon config.xml, je n’ai pas du tout.

1
Markus

J'ai eu exactement le même problème et j'ai remarqué que la plupart des réponses sont confondues pour différentes plateformes. La solution fonctionne pour moi est Explication détaillée pour différentes plates-formes

1
Sithu

J'utilise ceci comme règle générale:

$('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;
    }
});
1
thedjaney

Navigator for phonegap fonctionne!

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

...

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

Cela a fonctionné pour moi sur iOS

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