Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

211
Visualizações
¿Hay alguna manera de detectar si el navegador tiene un conjunto de controladores de protocolo mailto?

Tengo un sitio que crea dinámicamente una URL de correo que luego abre en una nueva pestaña/ventana, usando window.open().

 window.open("mailto:" + encodeURIComponent(r["to"]));

Estoy probando en Chrome en esta etapa, por lo que otros navegadores pueden actuar de manera diferente.

Si Chrome tiene configurado un controlador de protocolo mailto (por ejemplo, GMail), entonces funciona como se esperaba.

Si Chrome no tiene configurado un controlador de protocolo mailto, simplemente abre una pestaña con la url mailto y nada más.

Ese no es el peor resultado, pero sería bueno si hubiera una forma de saberlo de antemano, de modo que el usuario pudiera ser guiado de alguna manera para configurar su navegador para que la url de mailto funcione bien.

Anteriormente, solo abría en la misma página configurando window.location.href en la url:

 windows.location.href = "mailto:" + encodeURIComponent(r["to"]);

Esto no fue genial porque si no había un controlador de protocolo establecido, no pasaba nada . También consideraría esto como una opción, SI al menos puedo detectar la situación, pero tampoco pude encontrar ninguna indicación de eso. Supongo que una opción sería establecer un temporizador que, si llegara a la ejecución, podría alertar al usuario.

¿Alguien más ya resolvió esto? Parece un requisito bastante común.

Gracias

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Esto es con lo que terminé trabajando. No funciona en todos los casos, pero proporciona al menos alguna ayuda para reconocer protocolos no controlados.

Intenta abrir la URL en una nueva ventana y luego, después de 2 segundos, echa un vistazo para ver si puede leer la ubicación. Si ha abierto un sitio de un tercero (p. ej., GMail), esto generará una excepción, por lo que tratamos esto como un éxito .

Si no ocurre ninguna excepción, esto devuelve "about:blank", lo que significa que (probablemente) fallamos.

 function openWin(url) { return new Promise((resolve, reject) => { const w = window.open(url); if (!w) { reject(); } setTimeout(function() { try { const working = w.document.location.href; } catch (e) { resolve(); return; } w.close(); reject(); }, 2000); }); }

Llamado con algo como esto:

 openWin('mailto:' + encodeURIComponent(to)).then(() => { // handle success }).catch(() => { // handle failure });

Advertencia: esto solo funciona para los controladores de protocolos basados en la web. Si, por ejemplo, su mailto es manejado por una aplicación de correo electrónico, esto fallará.

En mi caso, la mayoría de la gente usaría el correo electrónico basado en la web, por lo que funciona en la mayoría de los casos. En caso de falla , muestro un mensaje que dice "Si su correo electrónico no se abrió, copie la dirección de correo electrónico aquí..."

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda