2013-10-07 10 views
22

Ho un collegamento mailto su una pagina. Funziona come previsto quando la pagina viene caricata da sola.mailto link non funziona all'interno di un frame chrome (oltre https)

Tuttavia, quando la pagina viene caricata tramite un set di frame in Chrome, non accade nulla. Con gli strumenti di sviluppo caricati viene visualizzato l'errore "[blocked] The page at https://mysite.com ran insecure content from mailto:...".

Come posso risolvere/risolvere questo?

+1

Sembra che Dale ha presentato un bug con Chrome: https://code.google.com/p/chromium/issues/detail?id=306349&q=mailto%20gmail&colspec=ID%20Pri%20M%20Week % 20ReleaseBlock% 20Cr% 20Status% 20Owner% 20Summary% 20OS% 20Modified – kendsnyder

risposta

21

Ho anche avuto questo problema di recente con un iframe. Usare il telaio superiore ha funzionato e dovrebbe essere compatibile con tutti i principali browser.

window.top.location = 'mailto:...'; 
+0

Quindi dovresti scrivere un javascript onclick (o qualcosa di simile) per gestire questo mailto: link? Sto solo cercando la sintassi per questa soluzione. – Chris

+7

Sì, usare "top" è il trucco, ma puoi farlo solo con l'HTML! email kendsnyder

1

Forse perché il set di frame principale è https, ma Chrome sembra ora considerare il collegamento mailto come non sicuro.

Ho appena imbattuto in un problema simile quando si attiva un collegamento mailto tramite

window.location = 'mailto:...' 

La modifica a questo ha funzionato intorno ad esso.

window.open('mailto:...') 
+0

Sembra quindi un bug? In tal caso dovrei presentare un bug report? –

+0

OK, la tua soluzione alternativa apre una nuova email, ma apre anche una nuova scheda/finestra vuota che non è desiderabile. Ho aperto un bug report con google. –

+1

Sì sì. Abbiamo dovuto copiarlo immediatamente chiudendo, che è ancora un po 'spazzatura. – Hugh

1

Questa è la mia soluzione finché non viene risolto Chrome bug:

$.browser.chrome = /chrom(e|ium)/.test(navigator.userAgent.toLowerCase()); 

if($.browser.chrome){ 
    myWindow=window.open("mailto:"+eml+"?subject="+msb,'','width=50,height=50'); 
    myWindow.close(); 
} else { 
    window.location.href = "mailto:"+eml+"?subject="+msb; 
} 

Per Chrome, fare un'istanza con metodo window.open() e chiudere immediatamente tale istanza. La piccola finestra "lampeggerà" per un breve periodo ma farà il lavoro. È una soluzione "sporca" ma tanto più bug di Chrome.

Per altri browser è possibile utilizzare il metodo window.location().

6

Ecco la soluzione ho finito con: Testato con Chrome, Firefox, IE6, IE7, IE8, IE9, IE10, IE11, Safari

$("a[href^='mailto:']").on("click",function() { 
    window.top.location = $(this).prop("href"); 
    return false; 
}); 
+0

Stranamente non ho potuto farlo funzionare - sembrava morire all'interno di jquery da qualche parte (stiamo ancora usando V 1.6.1). Ma non appena ho usato il metodo click, ha funzionato bene. Roba buona. –

+0

Sì, è il nuovo clic per le versioni più recenti di jQuery. – Davin

+0

Appena testato questo nel mio codice e funziona come previsto. –

24

Sì, utilizzando "top" è il trucco, ma puoi farlo solo con l'HTML!

<a target="_top" href="mailto:...">email</a> 
+1

+1 per non richiedere Javascript – nickgrim

+0

Questo è eccellente. Permette ai collegamenti mailto di funzionare ora all'interno di un iframe utilizzando il browser Chrome. Grazie mille!!! – rrudland

+0

Ho riscontrato un problema nel creare collegamenti 'mailto:' in una cornice di Facebook. Questo ha funzionato! –

1

Questo sarà anche il lavoro, e di solito chiudere la finestra con facebook ....

<a href="mailto:..." target="_blank">...</a> 

o

$("a[href^='mailto:']").attr('target','_blank');