web-dev-qa-db-fra.com

le lien mailto ne fonctionne pas dans un cadre chrome (sur https)

J'ai un lien mailto sur une page. Cela fonctionne comme prévu lorsque la page est chargée par elle-même.

Cependant, lorsque la page est chargée via un frameset en Chrome rien ne se passe. Avec les outils de développement chargés, l'erreur "[blocked] The page at https://mysite.com ran insecure content from mailto:..." est affiché.

Comment puis-je résoudre/contourner ce problème?

28
Dale K

J'ai également eu ce problème récemment avec un iframe. L'utilisation du cadre supérieur a fonctionné et doit être compatible avec tous les principaux navigateurs.

window.top.location = 'mailto:...';
28
Jason Hardies

Oui, utiliser "top" est l'astuce, mais vous pouvez le faire avec du HTML seul!

<a target="_top" href="mailto:...">email</a>
28
kendsnyder

Voici la solution avec laquelle je me suis retrouvé: testé avec Chrome, Firefox, IE6, IE7, IE8, IE9, IE10, IE11, Safari

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

add target = "_ top" ou "_blank" ou "_parent"

<a target="_top" href="mailto:[email protected]">email1</a>

<a target="_top" href="mailto:[email protected]">email2</a>

2
Wynston

Peut-être parce que votre frameset parent est https, mais Chrome semble maintenant traiter le lien mailto comme non sécurisé.

Je viens de rencontrer un problème similaire lors du déclenchement d'un lien mailto via

window.location = 'mailto:...'

Le changer en ceci a fonctionné autour de lui.

window.open( 'mailto:...')
1
Hugh

Voici ma solution de contournement jusqu'à Chrome est corrigé:

$.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;
}

Pour Chrome, créez une instance avec la méthode window.open () et fermez cette instance immédiatement. Une petite fenêtre "clignotera" pendant une courte période mais fera le travail. C'est une solution "sale" mais autant que le bug de Chrome.

Pour les autres navigateurs, la méthode window.location () peut être utilisée.

1
mikikg

Cela fonctionnera également et ne fermera pas la fenêtre avec facebook ....

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

ou

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