Como posso iniciar o cliente de e-mail e, em seguida, fazer um redirecionamento de página com Javascript?

StackOverflow https://stackoverflow.com/questions/2192860

  •  25-09-2019
  •  | 
  •  

Pergunta

Eu estou necessárias para fazer um site funcionar exatamente o mesmo em outros navegadores, como ele faz no IE6.Parte do atual código parecido com este:

<script>
function myFunc(){
 location.href="mailto:test@test.com&body=Hello!";
 location.href="newPage.html";
}
</script>
<body onload="myFunc();">
</body>

no IE, isso faz com que o cliente de correio para abrir com a mensagem especificada preparado e, em seguida, redirecciona o browser para newPage.html.Em outros navegadores, no entanto, só redirecionar para o newPage.html.Como posso conseguir este efeito (de abrir o cliente de correio e, em seguida, fazendo um redirecionamento de página) de forma consistente para todos os navegadores?
Como uma nota, eu também tentei fazer isso usando meta refresh, mas não teve êxito.

Foi útil?

Solução

Alterando a href A propriedade iniciará uma carga de localização, alterando -a novamente depois cancelará a navegação anterior.

Parece que o IE6 iniciará o cliente de email imediatamente ao definir a propriedade e continuará a execução do JavaScript. Outros navegadores parecem fazer as coisas de maneira diferente, e a segunda carga de localização cancelará a primeira.

Consegui contornar isso no Chrome com um cronômetro, ele também pode funcionar para outros navegadores:

function myFunc(){ 
  location.href="mailto:test@test.com&body=Hello!"; 
  window.setTimeout(function () { location.href="newPage.html" }, 0); 
} 

Outras dicas

Tente usar algo como:

<a href="mailto:mail@domain.com" onclick="window.location.href='np.html'">send</a>

Em vez de no Onload.

No todo, eu tendem a pensar que as configurações de segurança vai entrar em seu caminho e recomendaria apenas dando ao usuário um chato, antiquado mailto link para clique.(Edição:Talvez uma configurado como Mic sugere.)

O que disse, eu me pergunto se as coisas tornam-se mais confiável, se você introduzir um atraso:

function myFunc() {
    location.href = "mailto:test@test.com&body=Hello!";
    setTimeout(function() {
        location.href = "newPage.html";
    }, 500);
}

Isso funcionará apenas se o navegador do cliente souber para qual cliente de email abrir para mailto: links em primeiro lugar. Se o usuário usar um cliente baseado na Web que não esteja registrado no navegador, nada acontecerá.

Além disso, pode ser que as configurações de segurança evitem mailto: Os links abrem programaticamente ou o impedirão no futuro.

Eu não confiaria nisso para funcionar de qualquer maneira, apenas como uma boa função de conveniência opcional.

De qualquer forma, para responder à sua pergunta, você pode tentar definir um tempo limite entre as duas chamadas? Talvez a atualização da localização seja rápida demais para o navegador recuperar o atraso.

location.href="mailto:test@test.com&body=Hello!";
setTimeout(function(){ location.href = 'newPage.html' },  500);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top