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




теги парсер (3)

Обновить:

Как отмечает 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:[email protected]" href2="mailto:[email protected]" href3="mailto:[email protected]">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:[email protected]" href2="mailto:[email protected]" href3="mailto:[email protected]">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");
}

Я работаю с приложением, которое создало собственный протокол, такой как MS для своего MSN-клиента msnim:[email protected]

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

<?php header('Location: msnim:[email protected]'); ?> <?php header('Location: msnim:[email protected]'); ?> не будет создавать новую страницу или перенаправлять при нажатии пользователем 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:[email protected]';
        }, 100);
        setTimeout(function(){
            console.log('new ran');
            window.location = 'mailto:[email protected]';
        }, 200);
    });
});

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

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

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


Следующий код HTML / JavaScript будет <a id="click_me"> клики по <a id="click_me"> и создавать два новых iFrames для URL-адреса, который может инициировать созданную вами схему пользовательского URI:

<html>
<head>
<script type="text/javascript">
$(document).ready(function(){

    var imURL = 'http://josh.gitlin.name/9472703.php?id='; // Change this to your URL

    function openIM(who) {
        var iFrame = '<iframe src="'+imURL+who+'"></iframe>';
        $('div#imLinks').append(iFrame);
    }

    $("a#click_me").click(function(e){
        e.preventDefault();
        setTimeout(function(){
            openIM('1');
        }, 100);
        setTimeout(function(){
            openIM('2');
        }, 200);
    });
});​
</script>
</head>
<body>
    <p>Some content here</p>
    <p><a href="#" id="click_me">Click Me!</a></p>
    <div id="imLinks"></div>
</body>
</html>

Следующий код PHP - это то, что будет отображаться внутри этих iFrames:

<?php

$screenname = '';

switch($_REQUEST['id']) {
        case '1': $screenname = 'firstPerson'; break;
        case '2': $screenname = 'secondPerson'; break;
        default: $screenname = 'otherPerson'; break;
}

echo <<<END_OF_HTML 
<html>
<head>
<meta http-equiv="refresh" content="0;url=aim:goim?screenname=$screenname">
</head>
</html>
END_OF_HTML;

Протестировано в Safari и Chrome , это откроет несколько окон IM, когда будет нажата ссылка. Очевидно, подстройте свое удовлетворение.


Я рекомендую вам использовать guzzle с открытым исходным кодом, которое полностью тестируется на устройстве и использует новейшие методы кодирования.

Установка Guzzle

Перейдите в командную строку в папке проекта и введите следующую команду (при условии, что у вас уже установлен composer компоновщика пакетов). Если вам нужна помощь в установке Composer, вы должны посмотреть здесь .

php composer.phar require guzzlehttp/guzzle

Использование Guzzle для отправки запроса POST

Использование Guzzle очень прямолинейно, поскольку использует легкий объектно-ориентированный API:

// Initialize Guzzle client
$client = new GuzzleHttp\Client();

// Create a POST request
$response = $client->request(
    'POST',
    'http://example.org/',
    [
        'form_params' => [
            'key1' => 'value1',
            'key2' => 'value2'
        ]
    ]
);

// Parse the response object, e.g. read the headers, body, etc.
$headers = $response->getHeaders();
$body = $response->getBody();

// Output headers and body for debugging purposes
var_dump($headers, $body);




php javascript jquery header protocols