Descubrí que la respuesta seleccionada funciona para las aplicaciones del navegador, pero estaba teniendo problemas con el código que funciona en aplicaciones que no son del navegador que implementan a UIWebView
.
El problema para mí era que un usuario en la aplicación de Twitter haría clic en un enlace que los llevaría a mi sitio a través de un UIWebView
en la aplicación de Twitter. Luego, cuando hicieron clic en un botón de mi sitio, Twitter intenta ser elegante y solo completa el window.location
si el sitio es accesible. Entonces, lo que sucede es una UIAlertView
ventana emergente que dice si está seguro de que desea continuar y luego redirige inmediatamente a la App Store sin una segunda ventana emergente.
Mi solución involucra iframes. Esto evita que UIAlertView
se presente, lo que permite una experiencia de usuario simple y elegante.
jQuery
var redirect = function (location) {
$('body').append($('<iframe></iframe>').attr('src', location).css({
width: 1,
height: 1,
position: 'absolute',
top: 0,
left: 0
}));
};
setTimeout(function () {
redirect('http://itunes.apple.com/app/id');
}, 25);
redirect('custom-uri://');
Javascript
var redirect = function (location) {
var iframe = document.createElement('iframe');
iframe.setAttribute('src', location);
iframe.setAttribute('width', '1px');
iframe.setAttribute('height', '1px');
iframe.setAttribute('position', 'absolute');
iframe.setAttribute('top', '0');
iframe.setAttribute('left', '0');
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
};
setTimeout(function () {
redirect('http://itunes.apple.com/app/id');
}, 25);
redirect('custom-uri://');
EDITAR:
Agregue la posición absoluta al iframe para que cuando se inserte no haya un espacio en blanco al azar en la parte inferior de la página.
También es importante tener en cuenta que no he encontrado la necesidad de este enfoque con Android. Usar window.location.href
debería funcionar bien.