aboutsummaryrefslogtreecommitdiff
path: root/files/es/web/api/navigator/registerprotocolhandler/web-based_protocol_handlers/index.html
blob: 4cd1b46d104730e1dee42bc17cc49a5100237b65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
---
title: Controladores de protocolos basados en web
slug: Web/API/Navigator/registerProtocolHandler/Web-based_protocol_handlers
tags:
  - Avanzado
  - Controladores de Protocolos Basados en Web
  - HTML5
translation_of: Web/API/Navigator/registerProtocolHandler/Web-based_protocol_handlers
---
<h2 id="Background" name="Background">Antecedentes</h2>

<p>Es bastante común encontrar enlaces de páginas web a recursos que no usan protocolos <code>http</code>. Un ejemplo es el protocolo <code>mailto:</code>:</p>

<div style="overflow: hidden;">
<pre class="brush:html">&lt;a href="mailto:webmaster@example.com"&gt;Web Master&lt;/a&gt;</pre>
</div>

<p>Los autores de la Web pueden usar un enlace <code>mailto:</code> cuando quieren proporcionar una forma conveniente para que los usuarios envién un correo electrónico, directamente desde la página web. Cuando el enlace está activo, el navegador debería lanzar la aplicación de escritorio predeterminada para gestionar correos electrónicos. Se puede pensar en esto como un controlador de protocolos <em>basados en escritorio</em>.</p>

<p>Los controladores de protocolos basados en web permiten a las aplicaciones basadas en web participar en el proceso también. <span id="result_box" lang="es"><span>Esto es cada vez más importante a medida que más tipos de aplicaciones migren a la web</span></span>. De hecho, hay muchas aplicaciones basadas en web que gestionan correo electrónicos podrían procesar un enlace <code>mailto</code>.</p>

<h2 id="Registering" name="Registering">Registro</h2>

<p>Configurar una aplicación web como un controlador de protocolo no es un proceso difícil. Básicamente la aplicación web usa <code><a href="/en-US/docs/Web/API/navigator.registerProtocolHandler" title="DOM/window.navigator.registerProtocolHandler">registerProtocolHandler()</a></code> para registrarse a sí mismo con el navegador como un controlador potencial para un protocolo dado. Por ejemplo:</p>

<pre class="brush: js">navigator.registerProtocolHandler("burger",
                                  "http://www.google.co.uk/?uri=%s",
                                  "Burger handler");</pre>

<p>En donde los parámetros son:</p>

<ul>
 <li>El protocolo.</li>
 <li>La plantilla de la URL, usada como el controlador. El "%s" es reemplazado con el <code>href</code> del enlace y una petición GET es ejecutada en la URL resultante.</li>
 <li>El nombre fácil de usar para el controlador del protocolo.</li>
</ul>

<p>Cuando un navegador ejecuta este código, se le mostrará un mensaje al usuario, pidiendo permiso para permitir a la aplicación web registrase como controlador para el protocolo. Firefox muestra un mensaje en el área de la barra de notificaciones:</p>

<p><img alt="" src="https://mdn.mozillademos.org/files/9683/protocolregister.png" style="display: block; height: 401px; margin: 0px auto; width: 700px;"></p>

<div class="note"><strong>Nota:</strong> La plantila de la URL proporcionada al registrar <strong>debe</strong> ser del mismo dominio que el de la página que intenta realizar el registro o el registro fallará. Por ejemplo, <code class="plain">http://example.com/homepage.html</code> puede registrar un controlador de protocolo para <code class="plain">http://example.com/handle_mailto/%s</code>, pero no para <code class="plain">http://example.<em><strong>org</strong></em>/handle_mailto/%s</code>.</div>

<p>Al registrar el mismo controlador de protocolo más de una vez aparecerá una notifiación diferente, indicando que el controlador del protocolo ya ha está registrado. Por lo tanto, es una buena idea cuidar el registro del controlador de protocolo con una verificación para saber si ya está registrado, como con el siguiente ejemplo.</p>

<h3 id="Example" name="Example">Ejemplo</h3>

<pre class="brush: js">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;title&gt;Ejemplo de Controlador de Protocolo Web - Registro&lt;/title&gt;
  &lt;script type="text/javascript"&gt;
    navigator.registerProtocolHandler("burger",
                                  "http://www.google.co.uk/?uri=%s",
                                  "Burger handler");
  &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;Ejemplo de Controlador de Protocolo Web&lt;/h1&gt;
  &lt;p&gt;Esta página web instalará un controlador de protocolo web para el protocolo &lt;code&gt;burger:&lt;/code&gt;.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>

<h2 id="Activating" name="Activating">Activando</h2>

<p>Ahora, cada vez que el usuario active un enlace que usa el protocolo registrado, el navegador enrutará la acción a la URL suministrada cuando la aplicación web se haya registrado. Firefox, de manera predeterminada, alertará al usaurio antes de controlar la acción.</p>

<h3 id="Example_2" name="Example_2">Ejemplo</h3>

<pre class="brush: html">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;title&gt;Ejemplo de Controlador de Protocolo Web - Prueba&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;p&gt;Oye ¿Has visto &lt;a href="burger:cheeseburger"&gt;esto&lt;/a&gt; antes?&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>

<h2 id="Handling" name="Handling">Controlando</h2>

<p>La siguiente fase es controlar la acción. El navgador extrae el <code>href</code> desde el enlace activado, lo combina con la plantilla de la URL suministrada durante el registro del controlador y realzia una petición HTTP GET sobre la URL. Luego, usando los ejemplos anteriores, el navegador realizará una petición GET sobre esta URL:</p>

<pre>http://www.google.co.uk/?uri=burger:cheeseburger
</pre>

<p>El código del lado del servidor puede extraer los parámetros de la cadena de petición y realizar la acción deseada.</p>

<div class="note"><strong>Nota:</strong> Al código del lado del servidor se le pasa todo el contenido del <code>href</code>.  Esto significa que el código del lado del servidor tendrá que analizar el protocolo desde los datos.</div>

<h3 id="Example_3" name="Example_3">Example</h3>

<pre class="brush: php">&lt;?php
$value = "";
if ( isset ( $_GET["value"] ) ) {
  $value = $_GET["value"];
}
?&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;title&gt;Ejemplo de Controlador de Protocolo Web&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;Ejemplo de Controlador de Protocolo Web - Controlador&lt;/h1&gt;
  &lt;p&gt;Esta página es llamada al controlar una acción del protocolo &lt;code&gt;burger:&lt;/code&gt;. Datos enviados:&lt;/p&gt;
  &lt;textarea&gt;
&lt;?php echo(htmlspecialchars($value, ENT_QUOTES, 'UTF-8')); ?&gt;
  &lt;/textarea&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>

<h2 id="References" name="References">Referencias</h2>

<ul>
 <li><a href="http://www.w3.org/TR/2011/WD-html5-20110525/timers.html#custom-handlers">http://www.w3.org/TR/2011/WD-html5-20110525/timers.html#custom-handlers</a></li>
</ul>

<h2 id="See_also" name="See_also">Véase también</h2>

<ul>
 <li><a href="/en-US/docs/DOM/window.navigator.registerContentHandler" title="DOM/window.navigator.registerContentHandler">window.navigator.registerContentHandler</a></li>
 <li><a href="/en-US/docs/XPCOM_Interface_Reference/nsIProtocolHandler" title="nsIProtocolHandler">nsIProtocolHandler</a> (solamente XUL)</li>
 <li><a class="external" href="http://blog.mozilla.com/webdev/2010/07/26/registerprotocolhandler-enhancing-the-federated-web/">RegisterProtocolHandler, la mejora a la Web federada</a> en Mozilla Webdev</li>
 <li><a href="https://developers.google.com/web/updates/2011/06/Registering-a-custom-protocol-handler">Registrar un protocolHandler personalizado</a> en Google Developers.</li>
</ul>