2013-02-02 4 views
2

Je développe une application mobile utilisant Sencha Touch 2 et Cordova 2.3.0. Je voudrais être en mesure d'ouvrir tous les liens externes (du HTML chargé dynamiquement) dans le nouveau InAppBrowser.PhoneGap/Cordova 2.3 .: comment ouvrir tous les liens externes dans InAppBrowser?

Existe-t-il un moyen d'y parvenir sans avoir à modifier tous les liens externes pour contenir target = "_ blank"?

Je voudrais intercepter les clics sur les liens externes et les ouvrir en utilisant l'API window.open d'InAppBrowser. Comme je cible à la fois iOS et Android, je suppose qu'une solution javascript serait préférable d'éviter les codes séparés (Java et Objective-C).

Merci!

mise à jour: Je viens de découvrir ceci: https://gist.github.com/4694032

Le seul problème avec ceci est que je ne l'utilise jQuery dans mon application. Cela vaut-il la peine de l'inclure uniquement pour cette question?

+0

Non, ça ne vaut pas le coup. Devrait être facile de convertir le script. BTW si vous avez trouvé la réponse pls poster une réponse en citant le code de sites externes. –

+0

Merci. J'ai trouvé le lien que j'ai posté via google, pas par SO. – borck

Répondre

3
Ext.each(Ext.query('a'), function(el) { 
    el = Ext.get(el); 
    el.on('click', function(e) { 
     e.preventDefault(); 
     console.log('clicked', el.getAttribute('href')); 
    }); 
}); 
+0

Cela fonctionne très bien, mais j'ai toujours un problème. Mon application se connecte aux scripts php pour remplir les magasins avec, entre autres, les données html à afficher est de plusieurs pages de l'application. Est-il possible d'obtenir tous les éléments '' en une seule requête et pas seulement celle affichée sur la page en cours? En d'autres termes, est-il possible d'interroger tous les liens externes de l'application à la fois? – borck

+1

Dans ce cas, cela fonctionnera pour vous: http://stackoverflow.com/a/13567152/273985 – rdougan

+0

Exactement ce que je cherchais, merci beaucoup! – borck

1

Vous pouvez également ajouter cet événement exclusivement pour les attributs (href) qui commence par "http", en utilisant regexp:

Ext.Viewport.element.dom.addEventListener('click', function (e) { 
    if (e.target.tagName !== 'A') { 
     return; 
    }; 

    var url = e.target.getAttribute('href'); 
    var containsHttp = new RegExp('http\\b'); 

    //if href value begins with 'http' 
    if(containsHttp.test(url)) { 
     e.preventDefault(); 
     window.open(url, "_system"); // For iOS 
     navigator.app.loadUrl(url, {openExternal: true}); //For Android 
    } 
    else { 
     return; 
    } 
}, false); 

Ensuite, vous pouvez construire pour Android et iOS en même temps.

Questions connexes