iPhone Safari Web App открывает ссылки в новом окне - PullRequest
151 голосов
/ 24 мая 2010

У меня проблема с Интернетом после добавления значка на главный экран. Если веб-сайт запускается с главного экрана, все ссылки открываются в новом окне в Safari (и теряют полноэкранный режим). Как я могу предотвратить это? Я не смог найти никакой помощи, только тот же вопрос без ответа.

Ответы [ 20 ]

2 голосов
/ 23 января 2014

Это слегка адаптированная версия Шона, которая мешала вернуться назад

// this function makes anchor tags work properly on an iphone

$(document).ready(function(){
if (("standalone" in window.navigator) && window.navigator.standalone) {
  // For iOS Apps
  $("a").on("click", function(e){

    var new_location = $(this).attr("href");
    if (new_location != undefined && new_location.substr(0, 1) != "#" && new_location!='' && $(this).attr("data-method") == undefined){
      e.preventDefault();
      window.location = new_location;
    }
  });
}

});

2 голосов
/ 02 августа 2013

Это то, что у меня работало на iOS 6 (очень слабая адаптация ответа rmarscher):

<script>                                                                
    (function(document,navigator,standalone) {                          
        if (standalone in navigator && navigator[standalone]) {         
            var curnode,location=document.location,stop=/^(a|html)$/i;  
            document.addEventListener("click", function(e) {            
                curnode=e.target;                                       
                while (!stop.test(curnode.nodeName)) {                  
                    curnode=curnode.parentNode;                         
                }                                                       
                if ("href" in curnode && (curnode.href.indexOf("http") || ~curnode.href.indexOf(location.host)) && curnode.target == false) {
                    e.preventDefault();                                 
                    location.href=curnode.href                          
                }                                                       
            },false);                                                   
        }                                                               
    })(document,window.navigator,"standalone")                          
</script>
2 голосов
/ 29 октября 2012

Вы также можете делать ссылки почти нормально:

<a href="#" onclick="window.location='URL_TO_GO';">TEXT OF THE LINK</a>

И вы можете удалить хеш-тег и href, все, что он делает, влияет на внешний вид ..

1 голос
/ 07 апреля 2016

Для тех, кто использует JQuery Mobile, вышеприведенные решения ломают всплывающее диалоговое окно.Это будет держать ссылки в веб-приложении и позволит всплывающие окна.

$(document).on('click','a', function (event) {
    if($(this).attr('href').indexOf('#') == 0) {
        return true;
    }
    event.preventDefault();
    window.location = $(this).attr('href');     
});

Можно также сделать это:

$(document).on('click','a', function (event){
    if($(this).attr('data-rel') == 'popup'){
        return true;
    }
    event.preventDefault();
    window.location = $(this).attr('href');     
});
1 голос
/ 21 октября 2014

Я создал установочный пакет bower из ответа @ rmarscher , который можно найти здесь:

http://github.com/stylr/iosweblinks

Вы можете легко установить сниппет с беседкой, используя bower install --save iosweblinks

1 голос
/ 11 мая 2014

Один из обходных путей, который я использовал для веб-приложения для iOS, заключался в том, что я сделал все ссылки (которые были кнопками по CSS) с помощью кнопок отправки.Поэтому я открыл форму, которая отправила ссылку на место назначения, а затем введите type = "submit" Не лучшим образом, но это то, что я понял до того, как нашел эту страницу.

1 голос
/ 04 августа 2013

Я предпочитаю открывать все ссылки в режиме автономного веб-приложения, кроме тех, которые имеют target = "_ blank".Конечно, используя jQuery.

$(document).on('click', 'a', function(e) {
    if ($(this).attr('target') !== '_blank') {
        e.preventDefault();
        window.location = $(this).attr('href');
    }
});
1 голос
/ 11 января 2013

Для тех, кто использует Twitter Bootstrap и Rails 3

$('a').live('click', function (event) {
  if(!($(this).attr('data-method')=='delete')){
    var href = $(this).attr("href");
    event.preventDefault();
    window.location = href; 
  }   
});

Ссылки по-прежнему работают таким образом.

0 голосов
/ 29 августа 2018

Вы можете просто удалить этот метатег.

<meta name="apple-mobile-web-app-capable" content="yes">
0 голосов
/ 13 июня 2012

Вот что я бы использовал для всех ссылок на странице ...

document.body.addEventListener(function(event) {
    if (event.target.href && event.target.target != "_blank") {
        event.preventDefault();
        window.location = this.href;                
    }
});

Если вы используете jQuery или Zepto ...

$("body").on("click", "a", function(event) {
   event.target.target != "_blank" && (window.location = event.target.href);
});
...