Откройте ссылку href mailto в новой вкладке / окне - PullRequest
20 голосов
/ 18 декабря 2011

У меня есть изображение, которое, когда я нажимаю, хочу связать с mailto:

 <a id="mailto" href="mailto:hfms@live.com.my" target="_newtab" >
        <img src="@Url.Content("~/Content/HomePage/email.png")" alt="email" /></a>

Тем не менее, в настоящее время после нажатия на него запускается опция электронной почты, чтобы выбрать приложение mailto, и как только я выбираю, ссылка mailto открывается на текущей вкладке. Это заставит пользователя покинуть приложение.

Итак, я хочу, чтобы страница, на которую было отправлено электронное письмо (gmail, Yahoo и т. Д.), Была открыта в новой вкладке или в окне. есть идеи как это сделать? Я пробовал оба target = "_ newtab" и target = "_ blank", но оба не работали.

Любая помощь будет высоко ценится .. Спасибо ...

(метод jQuery также приемлем, если нет другого способа, спасибо)

Ответы [ 8 ]

26 голосов
/ 27 марта 2012

эта информация устарела, теперь я думаю, что это возможно, поскольку gmail и другие теперь работают через ссылки браузера. Однако существует проблема, заключающаяся в том, что вы хотите, чтобы он открывался только на новой вкладке, если НЕ открывается в почтовом клиенте системы, и открывается на новой вкладке, если это клиент веб-почты, в противном случае, например, пользователи Outlook видят пустую вкладку, что дезориентирует, тем более что они пользователи Outlook.

18 голосов
/ 21 июля 2014

Этот ответ основан на этом ответе Откройте ссылку href mailto в новой вкладке / окне .

В настоящее время новые браузеры поддерживают некоторые интерфейсы веб-почты (Как Gmail, Yahoo Mail, AoL и т. Д.).

Таким образом, мы можем просто открыть новое окно (поддержка старых браузеров, новые браузеры просто откроют новую вкладку) и добавить запасной вариант (в случае отсутствияпользователь javascript), используя предотвращение и перенаправление ссылок по умолчанию1021 *<a onClick="javascript:window.open('mailto:mail@domain.com', 'mail');event.preventDefault()" href="mailto:mail@domain.com">Send a e-mail</a>

http://jsfiddle.net/cNUNP/

Кредит https://stackoverflow.com/a/9880404/1107020

Угадай, вот и все.

Привет, Маркос.

14 голосов
/ 24 июля 2014

Вам не нужен Javascript / Jquery для этого. Работает стандартная ссылка (кроме Firefox v30 + из-за ошибки, см. Ниже).

<a href="mailto:example@example.com" target="_blank">

Начиная с Firefox 30, не работает в Firefox из-за ошибки . Он открывается на той же вкладке И заменяет историю, поэтому обратный удар не вернет вас на страницу, где была ссылка mailto: *. 1006 *

11 голосов
/ 18 декабря 2011

mailto вызывает почтовый клиент по умолчанию для пользователей. Он не открывает окно или вкладку в любом случае. Если вы хотите использовать окно или вкладку, вам нужно настроить форму и позволить форме открываться в вашем окне / вкладке. Конечно, вам придется настроить форму для отправки почты любым доступным способом на вашем сервере.

3 голосов
/ 15 июня 2018

Я знаю, что это старый вопрос, но эта ветка имела лучший набор ответов, если был найден. Я изменил ответ Маркоса выше, чтобы также закрыть пустую вкладку, которая создается, если у клиента есть внешний обработчик почты

контрольный ответ

JS (w \ jQuery для обработчиков событий)

$(document).on('click', 'a[href^=mailto]', function(e) {
  var checkClose, checkLoaded, event, href, i, len, loadEvents, results, t, wndw;
  e.preventDefault();
  href = this.href;
  wndw = window.open(href, 'mail');
  checkClose = function() {
    console.log('checkClose');
    try {
      wndw.location.href;
      return wndw.close();
    } catch (error) {
      return console.log('webmail');
    }
  };
  t = setTimeout(checkClose, 5000);
  try {
    checkLoaded = function() {
      console.log('loaded');
      clearTimeout(t);
      return t = setTimeout(checkClose, 2000);
    };
    wndw.onload = checkLoaded;
    loadEvents = ["DomContentLoaded", "load", "beforeunload", "unload"];
    results = [];
    for (i = 0, len = loadEvents.length; i < len; i++) {
      event = loadEvents[i];
      results.push(wndw.addEventListener(event, checkLoaded));
    }
    return results;
  } catch (error) {
    return checkLoaded();
  }
});

jsfiddle

1 голос
/ 22 июля 2018

Вариант 1 (JavaScript):

<script>
// Open mailto links in a new tab
function mailto(email, subject, body) {
    var url;
    url = 'mailto:' + email;
    url += '?subject=' + subject;
    url += '&body=' + body;
    window.open(url);
}
</script>

<a href="#" onclick="mailto('test@gmail.com', 'Subject', 'Body');event.preventDefault()">test@gmail.com</a>

Вариант 2 (JavaScript):

<script>
// Open mailto links in a new tab
function mailto(th) {
    var url = th.getAttribute('href');
    window.open(url);
}
</script>

<a href="mailto:test@gmail.com?subject=Subject&body=Body" onclick="mailto(this);event.preventDefault()">test@gmail.com</a>

Вариант 3 (jQuery):

<script>
// Open mailto links in a new tab
$('#mailto').click(function (e) {
    e.preventDefault();
    var url = $(this).attr('href');
    window.open(url);
});
</script>

<a href="mailto:test@gmail.com?subject=Subject&body=Body" id="mailto">test@gmail.com</a>

Вариант 4 (jQuery):

<script>
// Open mailto links in a new tab
$("a[href^='mailto:']").click(function(e) {
    e.preventDefault();
    var href = $(this).attr('href');
    var target = $(this).attr('target');
    window.open(href, target ? target : '_self');
});
</script>

<a href="mailto:test@gmail.com?subject=Subject&body=Body" target="_blank">test@gmail.com</a>

Целевой атрибут HTML: https://www.w3schools.com/tags/att_a_target.asp

0 голосов
/ 12 октября 2015

Есть дешевый html-взлом на эту проблему .....

Ссылка на одной странице ...

<a href="/mailto.html" target="_blank">Mail</a>

На mailto.html ....

<meta HTTP-EQUIV="REFRESH" content="0; url=mailto:who@website.com">

If nothing pops up click.....<a href="mailto:who@website.com">Mail!</a>

_blank открывает новую вкладку / окно, а метатег делает все остальное. ссылка как запасной вариант.

0 голосов
/ 29 апреля 2014

Вы пробовали «средний щелчок» («Открыть в новой вкладке»)?Это работает для меня

(http://forums.mozillazine.org/viewtopic.php?f=7&t=1842595)

, хотя кажется особенно странным просить пользователя нажать среднюю кнопку мыши

В любом случае я нашел псевдо-решение, которое, кажется, работает вFF 25 / Chrome 35

1.- Настройте свою ссылку примерно так:

<a href="javascript:void()"
 class="mailToLink" 
data-mail="mailaddr@domain.com">mailaddr@domain.com </a>

2.- Используя javascript (с примером jquery), установите событие onlclick, например:

    $('.mailToLink').on('click', function(){
        mailto=$(this).data('mail');
        w=window.open('','_blank','',true);
        w.location.href='mailto:'+mailto;
        w.focus();
    });

При этом открывается пустое новое окно / вкладка, а затем изменяется его местоположение, поэтому обработчик почтового протокола не может действовать, пока новое окно уже не открыто

Не проверено с локальным почтовым клиентом(Outlook и др.)

...