2012-07-23 11 views
7

Aquí es todo el código que he intentado:window.open() no funciona en Safari móvil web-app añadido a la pantalla principal

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

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

En el modo de aplicación web, la pantalla de tan solo se actualiza, no va a la ubicación. En Mobile Safari, funciona según lo previsto.

¿Es esto una limitación con las aplicaciones web en iPhone? ¿Hay alguna forma de evitarlo?

Aquí está el código completo:

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

y aquí está el JSON (algunos de ellos):

[{"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

¿Estás seguro que no es un problema con el 'select: function' llamarse a sí misma? Si hace otro poco de JavaScript en lugar de abrir una ventana, ¿funciona? – ceejayoz

+0

Parece que tienes razón. Lo pongo fuera de 'select: function' y funciona. Pero todavía lo necesito allí, desafortunadamente. Estoy usando el autocompletado de jQuery UI. ¿Alguna idea de lo que podría detenerlo y cómo superarlo? – dallen

+0

¿Puedes mostrar la totalidad de la llamada de autocompletar? Supongo que es algo simple que te perdiste, pero sin el código que es difícil de decir con certeza. – ceejayoz

Respuesta

1

Me di cuenta de esto. Estoy usando el siguiente código para evitar que los eslabones de la aplicación web desde su apertura en Safari:

https://gist.github.com/1042026

Esto estaba causando algunos efectos secundarios no deseados. Para solucionar esto, agregué:

event.stopPropagation();

en mi área selection:function y funciona como debería.

1

Programmatically (Javascript) abre un enlace en Mobile Safari. Ideal si no se puede utilizar un enlace HTML estándar, pero debe utilizar Javascript:

var a = document.createElement("a"); 
a.setAttribute('href', facebook); 
a.setAttribute('target', '_blank'); 
a.click(); 
Cuestiones relacionadas