113 votos

iPhone Safari Aplicación Web se abre enlaces en una ventana nueva

Tengo un problema con la web después de añadir un icono a la Pantalla de Inicio. Si la web es lanzado desde la Pantalla de Inicio, todos los enlaces se abrirán en una nueva ventana en Safari (y perder la plena funcionalidad de la pantalla). ¿Cómo se puede prevenir? No podía encontrar ninguna ayuda, sólo la misma pregunta sin respuesta.

83voto

Pavel Linkesch Puntos 1903

He encontrado JavaScript solución en iWebKit marco:

var a=document.getElementsByTagName("a");
for(var i=0;i<a.length;i++)
{
    a[i].onclick=function()
    {
        window.location=this.getAttribute("href");
        return false
    }
}

70voto

rmarscher Puntos 2542

Las otras soluciones, y aquí no cuenta para los enlaces externos (que probablemente desea abrir externamente en Safari), o no tiene en cuenta los enlaces relativos (sin el dominio).

El html5 mobile boilerplate proyecto enlaces a esta esencia que tiene una buena discusión sobre el tema: https://gist.github.com/1042026

Aquí está el código final se salieron con:

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

43voto

David H. Puntos 411

Si usted está usando jQuery, que usted puede hacer:

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

17voto

Sean Puntos 460

Esto me está funcionando en iOS 6.1 y con Bootstrap JS enlaces (es decir, menús desplegables, 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;
        }
      });
    }
  });

6voto

Blauesocke Puntos 1170

Basado en Davids respuesta y Richards comentario, usted debe realizar una verificación de dominio. De lo contrario, enlaces a otros sitios web también abrió en su aplicación web.

$('a').live('click', function (event)
{      
    var href = $(this).attr("href");

    if (href.indexOf(location.hostname) > -1)
    {
        event.preventDefault();
        window.location = href;
    }
});

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: