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

У меня есть изображение, при нажатии на которое я хочу ссылаться на mailto:

 <a id="mailto" href="mailto:[email protected]" target="_newtab" >
        <img src="@Url.Content("~/Content/HomePage/email.png")" alt="email" /></a>

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

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

Любая помощь будет принята с благодарностью .. Спасибо ...

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


person shennyL    schedule 18.12.2011    source источник
comment
Я хочу, чтобы ссылка mailto открывалась в новой вкладке или в окне - что именно вы ожидаете увидеть в этой новой вкладке или окне? Пожалуйста, будьте как можно более конкретными.   -  person evan    schedule 18.12.2011
comment
страница для отправки электронной почты, Gmail, Yahoo и т. д.   -  person shennyL    schedule 18.12.2011
comment
Это невозможно. Прости.   -  person jamieb    schedule 18.12.2011


Ответы (9)


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

person Scott    schedule 18.12.2011
comment
Возможно, это было правдой в 2011 году, но теперь это не так. Вы можете открывать почтовые клиенты, такие как Gmail, в новой вкладке, используя target = _blank. К сожалению, этого недостаточно, так как для людей, использующих автономные клиенты, откроется пустая вкладка. - person Chris Hanson; 21.01.2014
comment
А как открыть Outlook (самый популярный почтовый клиент) во вкладке? Всегда можно было открыть почтовые веб-службы в окне или на вкладке. Но веб-службы электронной почты не являются большинством почтовых клиентов. - person Scott; 21.01.2014
comment
Этот ответ устарел, некоторые почтовые клиенты открываются во вкладках, таких как gmail или inbox - person Matt MacLeod; 20.05.2016
comment
@MattMacLeod - почтовый клиент №1 - это Outlook. Как уже говорилось, хотя вы, безусловно, можете установить ссылку для открытия новой вкладки или окна ... это не будет работать с клиентом № 1 сегодня. Этот ответ не устарел. - person Scott; 21.05.2016
comment
@scott mailto вызывает почтовый клиент пользователя по умолчанию. Он ни в коем случае не открывает окна или вкладки. Эта часть устарела? - person Matt MacLeod; 29.11.2016
comment
@MattMacLeod Нет. Он не устарел. Mailto по-прежнему просто вызывает почтовый клиент пользователя по умолчанию. - person Scott; 29.11.2016

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

person RedScourge    schedule 26.03.2012
comment
Мой awnser основан на вашем посте, я только что добавил код. Но вы заслуживаете похвалы. - person Marcos Eusebi; 21.07.2014
comment
Проголосовали за линию, тем более что они являются пользователями Outlook. - person Lonnie Best; 25.10.2018

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

<a href="mailto:[email protected]" target="_blank">

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

person Costa    schedule 24.07.2014
comment
Это верно. Я пытаюсь найти решение. _blank делает именно то, что говорит Коста. Как мы можем обойти и открыть страницу Gmail в новой вкладке или, возможно, во всплывающем окне javascript? - person OldDogLearningNewPerlTricks; 25.02.2015
comment
Просто для истории, прошло 8 месяцев, а ошибка все еще существует. - person Leonidas; 30.03.2015
comment
Обновление 2016: ошибка до сих пор не исправлена. Первоначально был открыт в 2011 году, поэтому сомнительно, что это будет исправлено, если ошибка не получит тонну голосов за (подсказка, подсказка): bugzilla.mozilla.org/show_bug.cgi?id=646552 - person Costa; 19.02.2016
comment
Обновление 2017 г .: ошибка до сих пор не исправлена. Скорее всего, меня никогда не исправят без большого количества голосов за: bugzilla.mozilla.org/show_bug. cgi? id = 646552 - person Costa; 07.01.2017
comment
Обновление 2021 года: эта ошибка Firefox 10-летней давности до сих пор не исправлена. В системе отслеживания ошибок есть несколько недавних обсуждений, так что, возможно, надежда не потеряна. - person Costa; 02.05.2021

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

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

Таким образом, мы можем просто открыть новое окно (поддержка старого браузера, новые браузеры просто откроют новую вкладку) и добавить запасной вариант (в случае пользователя, не использующего javascript), используя preventDefault и перенаправление ссылок по умолчанию.

http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-cancelation

https://developer.mozilla.org/es/docs/DOM/event.preventDefault

https://developer.mozilla.org/en-US/docs/Web/API/Window.open

Вот так:

<a onClick="javascript:window.open('mailto:[email protected]', 'mail');event.preventDefault()" href="mailto:[email protected]">Send a e-mail</a>

http://jsfiddle.net/cNUNP/

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

Думаю, это все.

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

person Marcos Eusebi    schedule 20.07.2014

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

справочный ответ

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

person Sampson Crowley    schedule 14.06.2018
comment
Это используется в производстве на моей работе без проблем для google chrome, я не проверял другие браузеры - person Sampson Crowley; 15.06.2018
comment
подтвердил последний firefox. Я использую Linux, поэтому не могу проверить IE - person Sampson Crowley; 15.06.2018
comment
Спасибо @ Sampson-Crowley! Я могу подтвердить, что это работает в IE (11) и Chrome (68). При правильной настройке Chrome по умолчанию и с учетной записью он открывается как веб-клиент. Вместо этого с настройкой почтового клиента он также работает. В каком-то сценарии я мог получить пустую вкладку (не могу воссоздать), но она закрывалась автоматически, как и ожидалось из кода. Также протестирован на Android, который входит в Gmail. Спасибо, что поделился! - person Henrik; 27.08.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('[email protected]', 'Subject', 'Body');event.preventDefault()">[email protected]</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:[email protected]?subject=Subject&body=Body" onclick="mailto(this);event.preventDefault()">[email protected]</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:[email protected]?subject=Subject&body=Body" id="mailto">[email protected]</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:[email protected]?subject=Subject&body=Body" target="_blank">[email protected]</a>

Атрибут цели HTML: https://www.w3schools.com/tags/att_a_target.asp

person Botyk    schedule 22.07.2018
comment
Встроенные обработчики - довольно плохая практика - рассмотрите возможность правильного подключения обработчиков, используя вместо этого Javascript. - person CertainPerformance; 22.07.2018
comment
Я сделал другой вариант - person Botyk; 22.07.2018

Можно подтвердить, что _blank по-прежнему не работает в Firefox для ссылки по электронной почте. Вместо этого используйте функцию onClick, которая будет делать что-то вроде этого:

window.open ('mailto:' + электронная почта + '? subject =' + subject);

person funnyfish    schedule 23.04.2021

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

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

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

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

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

<a href="javascript:void()"
 class="mailToLink" 
data-mail="[email protected]">[email protected] </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 и др.)

person mtsdev    schedule 29.04.2014

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

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

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

На mailto.html ....

<meta HTTP-EQUIV="REFRESH" content="0; url=mailto:[email protected]">

If nothing pops up click.....<a href="mailto:[email protected]">Mail!</a>

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

person Rollins    schedule 12.10.2015