Обновление:
Как указывает BHare, ни один из подходов с несколькими всплывающими окнами не работает в последних версиях Chrome. Причиной этого является обнаружение действий, инициируемых пользователем, в отличие от потенциально злонамеренного затопления пользовательских экранов нежелательными окнами.
По сути, Chrome позволит вам вызывать не более одного всплывающего окна на событие клика. Событие click также должно быть уникальным, поэтому оно не может вызвать обработчик, который покажет всплывающее окно # 1, распространится на родительский элемент и вызовет другой обработчик, который покажет всплывающее окно # 2 и т. Д.
Еще одна неудачная попытка была предпринята при попытке распространения всплывающих окон (главная страница инициирует всплывающее окно A, которое запускает всплывающее окно B, которое запускает всплывающее окно C и т. Д.) - это было признано действием, не инициированным пользователем, и в конечном итоге был только один вызов протокола допускается.
К сожалению, это поведение не контролируется редактируемой политикой, т. Е. Ее нельзя изменить, разрешив всплывающие окна на основе домена происхождения.
В зависимости от особенностей развертывания (т. Е. Интрасеть или интернет) вы можете закодировать расширение для Chrome, которое будет инициировать всплывающие окна на уровне Chrome (что означает браузер Chrome , эффективно любой контент / стиль / сценарий, который существует за пределами и выше любой отдельной страницы). Ваша страница, в свою очередь, может определять доступность настраиваемой надстройки и направлять «тройные ссылки» на это расширение или предлагать конечному пользователю установить надстройку. Видя, как вы не можете изменить поведение ссылок целевого протокола (например, путем объединения инструкций в один вызов, аналогичный тому, что был href = "mailto: first @ email.com, second @ email.com , третий @ email.com ") это может быть единственным вариантом, доступным вам на данном этапе.
Оригинальный ответ:
Ссылка для протокола будет работать так же хорошо на стороне клиента без когда-либо доступа к серверу; Вы можете просто добавить iframe во время выполнения с правильным набором src.
Во-первых, давайте хорошо позаботимся о разметке. Это унизительно, когда приходится вручную назначать ссылки на функции кликов. Я сделал это первым способом, который работал и имел смысл (ценой проверки HTML), но вы могли бы быть аккуратнее и использовать пользовательские атрибуты data- *:
<a href="mailto:first@tempinbox.com" href2="mailto:second@tempinbox.com" href3="mailto:third@tempinbox.com">Click me!</a>
Вы знаете, что еще унижает? Необходимость вручную связывать функции щелчка - это требует слишком много усилий. А что если бы было два таких якоря? Давайте просто скажем jQuery привязать событие click к каждой ссылке, использующей этот протокол:
$('a[href^="mailto:"]').bind("click", function(e){
/*Do stuff*/
});
Перед тем, как перейти к атрибутам href ~ href3 , давайте напишем функцию, которая будет обрабатывать открытие отдельных ссылок mailto:
function openMailto(s){
if (s) $("<iframe />", {src:s, class:"mailto-iframe"}).appendTo("body");
}
Он проверяет, что URL передается из непустого атрибута, динамически создает элемент iframe, сопоставляет с ним атрибуты и «запускает» его, добавляя в тело.
Завершено здесь: http://jsfiddle.net/uaLVh/ - дополнительные бонусы включают в себя некоторые CSS, чтобы скрыть вспомогательные фреймы и стилизовать ссылки для протокола. И да, я знаю, что обещал перебрать атрибуты href, но я только что сделал это вручную.
HTML
<a href="#">Don't click me</a><br/>
<a href="mailto:first@tempinbox.com" href2="mailto:second@tempinbox.com" href3="mailto:third@tempinbox.com">Click me!</a>
CSS
/*prevent these iframes from being visible*/
iframe.mailto-iframe{display:none;}
/*bonus: style your protocol-specific links*/
a[href^="mailto:"] {padding-left:20px;background:url(http://sstatic.net/stackoverflow/img/favicon.ico) no-repeat;}
JS
$('a[href^="mailto:"]').bind("click", function(e){
//cache "this" link element jquery reference
$this=$(this);
//remove "helper" iframes if any, you don't want to end up with 300 iframes by accident!
$("iframe.mailto-iframe").remove();
//go wild... you could have a nice loop as you're not limited to 3 hrefs
openMailto($this.attr("href"));
openMailto($this.attr("href2"));
openMailto($this.attr("href3"));
//processing href2 and href3 before allowing the default action to happen firstseemed counter-intuitive
e.preventDefault();
return false;
});
function openMailto(s){
if (s) $("<iframe />", {src:s, class:"mailto-iframe"}).appendTo("body");
}