Comment puis-je lancer le client de messagerie, puis effectuez une page avec redirection Javascript?

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

  •  25-09-2019
  •  | 
  •  

Question

Je suis obligé de faire une fonction de site exactement la même chose sur d'autres navigateurs comme dans IE6. Une partie du code actuel ressemble à ceci:

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

dans IE, cela provoque le client de messagerie pour ouvrir avec le message spécifié préparé, puis redirige le navigateur newPage.html. D'autres navigateurs, cependant, redirigent uniquement newPage.html. Comment puis-je obtenir cet effet (ouverture du client de messagerie et de faire ensuite une redirection de page) cohérente à travers les navigateurs?
Comme une note, je l'ai également essayé d'y arriver en utilisant meta refresh, mais sans succès.

Était-ce utile?

La solution

Modification de la propriété href commencera une charge de l'emplacement, le changer sera à nouveau par la suite annuler la dernière navigation.

Il semble que IE6 démarre le client e-mail immédiatement après définition de la propriété, puis continuer l'exécution javascript. D'autres navigateurs semblent faire les choses différemment, et la deuxième charge de l'emplacement annule la première.

J'ai réussi à contourner ce dans Chrome avec une minuterie, il pourrait fonctionner pour les autres navigateurs aussi:

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

Autres conseils

Essayez d'utiliser quelque chose comme:

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

Au lieu d'au onload.

Dans l'ensemble, je tends à penser que les paramètres de sécurité dans votre chemin et recommanderaient simplement donner à l'utilisateur un lien mailto ancienne ennuyeuse à cliquer. (Edit. Peut-être une mise en place comme l'indique Mic)

Cela dit, je me demande si les choses deviennent plus fiables si vous introduisez un retard:

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

Cela ne fonctionnera que si sait quel client E-Mail le navigateur du client pour ouvrir des liens mailto: en premier lieu. Si l'utilisateur utilise un client Web qui n'est pas inscrit sur le navigateur, rien ne se passera.

En outre, il est possible que les paramètres de sécurité empêchent les liens de mailto: d'ouvrir un programme, ou empêcheront à l'avenir.

Je ne me fierais pas sur que cela fonctionne de toute façon, seulement comme une belle fonction de commodité en option.

Quoi qu'il en soit, pour répondre à votre question, vous pouvez essayer de définir un délai d'attente entre les deux appels? Peut-être l'emplacement de rafraîchissement est tout simplement trop rapide pour le navigateur pour rattraper son retard.

location.href="mailto:test@test.com&body=Hello!";
setTimeout(function(){ location.href = 'newPage.html' },  500);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top