Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

206
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!