J'ai un problème avec le web après l'ajout de l'icône à l'Écran d'Accueil. Si le web est lancé à partir de l'Écran d'Accueil, tous les liens s'ouvriront dans une nouvelle fenêtre dans Safari (et de perdre complète les fonctionnalités de l'écran). Comment puis-je l'empêcher? Je ne pouvais pas trouver l'aide, que la même question sans réponse.
Réponses
Trop de publicités?J'ai trouvé solution d'activer JavaScript dans iWebKit cadre:
var a=document.getElementsByTagName("a");
for(var i=0;i<a.length;i++)
{
a[i].onclick=function()
{
window.location=this.getAttribute("href");
return false
}
}
Les autres solutions ici ne prennent pas en compte les liens externes (probablement que vous souhaitez ouvrir de l'extérieur dans Safari) ou ne prennent pas en compte les liens relatifs (sans le domaine).
Le html5 mobile-réutilisable projet liens vers cet essentiel qui a une bonne discussion sur le sujet: https://gist.github.com/1042026
Voici le code final, ils sont venus avec:
<script>(function(a,b,c){if(c in b&&b[c]){var d,e=a.location,f=/^(a|html)$/i;a.addEventListener("click",function(a){d=a.target;while(!f.test(d.nodeName))d=d.parentNode;"href"in d&&(d.href.indexOf("http")||~d.href.indexOf(e.host))&&(a.preventDefault(),e.href=d.href)},!1)}})(document,window.navigator,"standalone")</script>
Cela fonctionne pour moi sur iOS 6.1 et avec Bootstrap JS liens (j'.e menus déroulants, etc)
$(document).ready(function(){
if (("standalone" in window.navigator) && window.navigator.standalone) {
// For iOS Apps
$('a').on('click', function(e){
e.preventDefault();
var new_location = $(this).attr('href');
if (new_location != undefined && new_location.substr(0, 1) != '#' && $(this).attr('data-method') == undefined){
window.location = new_location;
}
});
}
});
Basé sur Davids réponse et Richards commentaire, vous devez effectuer un domaine à vérifier. Sinon les liens vers d'autres sites web sera également ouvert dans votre application web.
$('a').live('click', function (event)
{
var href = $(this).attr("href");
if (href.indexOf(location.hostname) > -1)
{
event.preventDefault();
window.location = href;
}
});