155 votes

iPhone Safari Web App s'ouvre un lien dans une nouvelle fenêtre

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.

110voto

Pavel Linkesch Points 1903

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
    }
}

96voto

rmarscher Points 2542

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>

47voto

David H. Points 411

Si vous utilisez jQuery, vous pouvez le faire:

$("a").click(function (event) {
    event.preventDefault();
    window.location = $(this).attr("href");
});

21voto

Sean Points 460

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;
        }
      });
    }
  });

5voto

Blauesocke Points 1170

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;
    }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X