Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Manipuladores de protocolo web

Visão geral

É comum encontrar páginas com links para recursos utilizando protocolos não-http. Um exemplo é o protocolo mailto::

<a href="mailto:webmaster@exemplo.com">Web Master</a>

Autores podem usar um link mailto: quando desejam fornecer uma maneira conveniente de enviar mensagens diretamente da página. Quando o link é ativado, o navegador deve lançar a aplicação padrão do sistema para manipular emails. Você pode pensar nisso como um manipulador de protocolos baseado no desktop.

Manipuladores de protocolos baseados na web permitem que aplicações web também participem desse processo. Isso tem-se tornado mais importante à medida em que mais e mais tipos de aplicações tem migrado para a web. Na verdade, existem várias aplicações que manipulam mensagens baseadas na web que poderiam processar os links mailto.

Registrando

Registrar uma aplicação web como manipulador de protocolos não é um processo difícil. Basicamente, a aplicação web deve utilizar o o método registerProtocolHandler() para registrar-se como manipulador em potencial para um determinado protocolo. Por exemplo:

navigator.registerProtocolHandler("mailto",
                                  "https://www.exemplo.com/?uri=%s",
                                  "Correio de Exemplo");

Onde os parâmetros são:

  • O protocolo;
  • A URL do documento utilizado como manipulador; o "%s" será substituido pelo valor do atributo href do link e um GET será executado na URL resultante;
  • O nome amigável do manipulador.

Quando um navegador executa esse código, ele deve pedir permissão ao usuário para registrar a aplicação como manipulador do protocolo. O Firefox exibe um prompt na barra de notificação:

Image:mpw-notificacao.png

Note: 

Exemplo

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
  <title>Exemplo de manipulador de protocolo - Registro</title>
  <script type="text/javascript">
    navigator.registerProtocolHandler("falso",
                                      "http://loremipsum.org/projetos/mpw.php?valor=%s",
                                      "Falso Mail");
  </script>
</head>
<body>
  <h1>Exemplo de manipulador de protocolo</h1>
  <p>Esta página instalará um manipulador de protocolos para o protocolo <code>falso:</code>.</p>
</body>
</html>

Ativando

Agora, sempre que o usuário ativar um link que utiliza o protocolo registrado, o navegador direcionará a ação para a URL fornecida pela aplicação registrada. O Firefox irá, por padrão, perguntar ao usuário antes de executar a ação.

Image:mpw-executar.png

Exemplo

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
  <title>Exemplo de manipulador de protocolo - Teste</title>
</head>
<body>
  <p>Ei, você já viu <a href="falso:URL%20de%20exemplo">isso</a> antes?</p>
</body>
</html>

Manipulando

A próxima fase é manipular a ação. O navegador extrai o valor do atributo href do link ativado, combina esse valor com a URL fornecida pelo manipulador durante o registro e executa um HTTP GET na URL. Assim, usando os exemplos acima, o navegador executaria um GET na seguinte URL:

http://loremipsum.org/projetos/mpw.php?valor=falso:URL%20de%20exemplo

Programas no servidor podem extrair os parâmetros e executar a ação desejada.

Note: o valor inteiro do atributo href é passado ao programa do servidor. Isso significa que o programa no servidor deverá separar o protocolo dos dados.

Exemplo

<?php
$value = "";
if ( isset ( $_GET["valor"] ) ) {
  $value = $_GET["valor"];
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
    <title>Exemplo de manipulador de protocolo</title>
</head>
<body>
  <h1>Exemplo de manipulador de protocolo - Manipulador</h1>
  <p>Esta página é chamada ao manipular uma ação do protocolo <code>falso:</code>. Dados enviados:</p>
  <textarea>
<?php echo(urldecode($valor)) ?>
  </textarea>
</body>
</html>

Categorias

Interwiki Language Links

Etiquetas do documento e colaboradores

Etiquetas: 
 Colaboradores para esta página: Verruckt, Fernandopsilveira, Leandro Mercês Xavier
 Última atualização por: Verruckt,