[Php] Отправка нескольких запросов протоколов приложений (Подобно mailto:)


Answers

Обновить:

Как отмечает BHare, ни одно из подходов «множественного всплывающего окна», похоже, не работает в последних версиях Chrome. Причиной этого является их обнаружение «инициированных пользователем» действий в отличие от потенциально вредоносного наводнения экранов пользователей с нежелательными окнами.

По сути, Chrome позволит вам запускать не более одного всплывающего окна за клик. Событие клика также должно быть уникальным, поэтому он не может вызвать обработчик, который отобразит всплывающее окно №1, распространится на родителя и вызовет другой обработчик, который отобразит всплывающее окно 2 и т. Д.

Другая неудачная попытка была предпринята попыткой распространить всплывающие окна (главная страница инициирует всплывающее окно A, которое инициирует всплывающее окно B, которое инициирует всплывающее окно C и т. Д.) - это было признано как действие, инициированное не пользователем, и в конечном итоге разрешен только один вызов протокола.

К сожалению, это поведение не контролируется редактируемой политикой, т. Е. Его нельзя настроить, разрешив всплывающие окна на основе исходного кода.

В зависимости от особенностей развертывания (например, интрасети и Интернета) вы можете запрограммировать расширение для Chrome, которое инициирует всплывающие окна на уровне хрома (что означает браузер Chrome , эффективно любой контент / стиль / скрипт, который существует вне и над любой отдельной страницей) , Ваша страница может, в свою очередь, обнаруживать пользовательскую добавленную доступность и иметь ваши «тройные ссылки», направляемые на это расширение, или запрашивать у конечного пользователя, чтобы надстройка была установлена. Видя, как вы не можете изменить поведение ссылок на целевые протоколы (например, комбинируя инструкции в один вызов, аналогичный запросу href = "mailto: first @ email.com, second @ email.com, third @ email.com " ), это может быть единственным вариантом, доступным вам на данном этапе.

Оригинальный ответ:

Специфическая для протокола ссылка будет работать так же хорошо на стороне клиента, даже не перейдя на сервер; вы можете просто добавить iframe (ы) во время выполнения с правильным набором src.

Во-первых, давайте хорошо позаботимся о разметке. Это унизительно, когда нужно вручную назначать URL-адреса для функций щелчка. Я сделал это первым способом, который сработал и имел смысл (по цене проверки 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");
}
Question

Я работаю с приложением, которое создало собственный протокол, такой как MS для своего MSN-клиента msnim:chat?contact=test@test.com

Тем не менее, мне нужно создать PHP или javascript (или комбо), чтобы как можно скорее отправить 3 запроса в протокол. Я также хочу, чтобы конечный результат был www.test.com/send.php что ссылка пользователя <a href='www.test.com/send.php'> не будет всплывать или перенаправляться на страницу, как это делается

<?php header('Location: msnim:chat?contact=test@test.com'); ?> <?php header('Location: msnim:chat?contact=test@test.com'); ?> не будет создавать новую страницу или перенаправлять при нажатии пользователем href

Вот JQUERY и JSBin моего доказательства концепции

http://jsbin.com/etubas/11/

$(document).ready(function(){
    $("a#click_me").click(function(){
        setTimeout(function(){
            console.log('test ran');
            window.location = 'mailto:test@test.com';
        }, 100);
        setTimeout(function(){
            console.log('new ran');
            window.location = 'mailto:new@new.com';
        }, 200);
    });
});

Это похоже на работу с IE9 и насколько я вижу IE8. Firefox 10, похоже, тоже ОК, но хром 17 только 1-й адрес электронной почты.

Изменить 1: Обновлено с MSN вместо ссылок AIM, чтобы быть более универсальным для тестирования, и включать пример jquery и JSbin

Изменить 2: обновить ссылки на mailto