2012-07-23 18 views
7

Oto cały kod Próbowałem:window.open() nie działa w mobilnym Safari web-aplikacji dodanej do ekranu głównego

select:function(event, ui) { 
    window.open(ui.item.value, "_blank"); 
} 

select:function(event, ui) { 
    window.location.href = ui.item.value; 
} 

Gdy w trybie aplikacji internetowych, na ekranie tylko odświeża, nie trafia do lokalizacji. W Mobile Safari działa zgodnie z przeznaczeniem.

Czy to ograniczenie w aplikacjach internetowych na iPhonie? Czy jest jakiś sposób obejścia tego?

Oto kompletny kod:

<script> 
$(document).ready(function() { 
    var cct = $('input[name=csrf_token]').val();  
    var searchInput = $('input[name=search]'); 

    function loadEventsData(onSuccess){ 
     $.ajax({ 
     type: 'POST', 
     url: '<?php echo site_url('ajax_frontend/getEventsSearch'); ?>', 
     dataType: 'json', 
     success: onSuccess, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); } 
     }); 
    } 

    function initializeEventsAutocomplete(data){ 
     searchInput.addClass('loaded').autocomplete({ 
     source:data, 
     appendTo: '.search_autocomplete', 
     minLength:2, 
     delay:0, 
     selectFirst:false, 
     open: function(event, ui) { 
     $('ul.events').hide(); 
     $('.ui-autocomplete').removeAttr('style'); 
     $('.icon-search').hide(); 
     $('.icon-close').show(); 
     }, 
     close: function(event, ui) { 
     val = searchInput.val(); 
     searchInput.autocomplete("search", val); 
     searchInput.focus(); 
     return false; 
     }, 
     select:function(event, ui) { 
     window.location.href = ui.item.value; 
     return false; 
     } 
     }); 
    } 

    $('form').submit(function(e) { 
     e.preventDefault(); 
     searchInput.blur(); 
    }); 

    searchInput.keyup(function(){ 
    if($(this).is(".loaded")) return; 
    loadEventsData(initializeEventsAutocomplete); 
    }); 

    $('.icon-close').click(function(e) { 
     e.preventDefault(); 

     $(this).hide(); 
     $('.icon-search').show(); 
     searchInput.autocomplete('close'); 
     $('ul.events').show(); 
     searchInput.val(''); 
    }); 
}); 
</script> 

I tu jest JSON (niektóre z nich):

[{"value":"http:\/\/events.dev\/index.php\/event\/canada-day","label":"Canada Day"},{"value":"http:\/\/events.dev\/index.php\/event\/triathlon-festival","label":"Triathlon Festival"}] 
+0

Czy jesteś pewien, że nie ma problemu z 'wybrać: zakresie funkcji nazywać się? Jeśli zrobisz inny kod JavaScript zamiast otwierania okna, to działa? – ceejayoz

+0

Wygląda na to, że masz rację. Odkładam go poza 'select: function' i działa. Ale nadal potrzebuję tego tam, niestety. Używam autouzupełniania UI jQuery. Każdy pomysł, co może go powstrzymać i jak go pokonać? – dallen

+0

Czy możesz pokazać całe połączenie autouzupełniania? Sądzę, że to coś, co przegapiłeś, ale bez kodu, który trudno powiedzieć na pewno. – ceejayoz

Odpowiedz

1

wyobraziłem to. Używam następujący kod, aby zapobiec linków w aplikacji internetowej z otworem w Safari:

https://gist.github.com/1042026

To powodowało pewne niepożądane skutki uboczne. Aby rozwiązać ten problem, dodałem:

event.stopPropagation();

do mojego obszaru selection:function i działa tak, jak powinien.

1

Programowo (Javascript) otwiera łącze w Mobile Safari. Idealny, jeśli nie można użyć standardowego łącza HTML, ale trzeba użyć javascript:

var a = document.createElement("a"); 
a.setAttribute('href', facebook); 
a.setAttribute('target', '_blank'); 
a.click(); 
Powiązane problemy