Descobri que a resposta selecionada funciona para os aplicativos de navegador, mas eu estava tendo problemas com o código que trabalhava em aplicativos que não são de navegador que implementam a UIWebView
.
O problema para mim era que um usuário do aplicativo do Twitter clicaria em um link que os levaria ao meu site por meio de um UIWebView
aplicativo do Twitter. Então, quando eles clicaram em um botão do meu site, o Twitter tenta ser chique e só completa window.location
se o site estiver acessível. Então, o que acontece é um UIAlertView
pop-up dizendo que você tem certeza de que deseja continuar e, em seguida, redireciona imediatamente para a App Store sem um segundo pop-up.
Minha solução envolve iframes. Isso evita a UIAlertView
apresentação, permitindo uma experiência de usuário simples e 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:
Adicione posição absoluta ao iframe para que, quando inserido, não haja um espaço aleatório de espaço em branco na parte inferior da página.
Também é importante observar que eu não encontrei a necessidade dessa abordagem com o Android. Usar window.location.href
deve funcionar bem.