Come posso avviare il client di posta elettronica e quindi eseguire un reindirizzamento della pagina con JavaScript?

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

  •  25-09-2019
  •  | 
  •  

Domanda

Devo far funzionare un sito Web esattamente lo stesso su altri browser come in IE6. Parte del codice corrente sembra simile a questo:

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

In IE, questo fa aprire il client di posta con il messaggio specificato preparato, quindi reindirizza il browser su Newpage.html. Altri browser, tuttavia, reindirizzano solo a newpage.html. Come posso ottenere questo effetto (aprendo il client di posta e quindi eseguire un reindirizzamento della pagina) in modo coerente tra i browser?
Come nota, ho anche provato a raggiungere questo obiettivo usando il meta -aggiornamento, ma non ho avuto successo.

È stato utile?

Soluzione

Cambiando il href La proprietà avvia un carico di posizione, cambiandolo successivamente annullerà la navigazione precedente.

Sembra che IE6 avvierà immediatamente il client di posta elettronica dopo l'impostazione della proprietà, quindi continuerà l'esecuzione JavaScript. Altri browser sembrano fare le cose in modo diverso e il secondo carico di posizione annullerà il primo.

Sono riuscito a aggirarlo in Chrome con un timer, potrebbe funzionare anche per altri browser:

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

Altri suggerimenti

Prova a usare qualcosa di simile:

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

Invece di Onload.

Nel complesso, tendo a pensare che le impostazioni di sicurezza si metteranno sulla tua strada e ti consiglierei di dare all'utente un noioso vecchio stile mailto collegamento a fare clic. (EDIT: forse una configurazione come suggerisce il microfono.)

Detto questo, mi chiedo se le cose diventino più affidabili se introduci un ritardo:

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

Funzionerà solo se il browser del cliente sa quale client di posta elettronica aprire mailto: collegamenti in primo luogo. Se l'utente utilizza un client basato sul Web che non è registrato con il browser, non succederà nulla.

Inoltre, potrebbe essere che le impostazioni di sicurezza impediscano mailto: collegamenti dall'apertura di programmazione o lo impediranno in futuro.

Non farei affidamento su questo per funzionare in entrambi i modi, solo come una bella funzione di convenienza opzionale.

Comunque, per rispondere alla tua domanda, puoi provare a impostare un timeout tra le due chiamate? Forse l'aggiornamento della posizione è troppo rapido per far recuperare il browser.

location.href="mailto:test@test.com&body=Hello!";
setTimeout(function(){ location.href = 'newPage.html' },  500);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top