aboutsummaryrefslogtreecommitdiff
path: root/files/de/web/api/navigator/registerprotocolhandler/web-based_protocol_handlers/index.html
blob: 7f5378c6d8a8c0edd60d26cfef433ede7dcbdc9a (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
---
title: Webbasierte Protokoll-Handler
slug: Web/API/Navigator/registerProtocolHandler/Web-based_protocol_handlers
translation_of: Web/API/Navigator/registerProtocolHandler/Web-based_protocol_handlers
original_slug: Web/API/Navigator/registerProtocolHandler/Webbasierte_protokoll-handler
---
<h2 id="Background" name="Background">Hintergrund</h2>

<p>Man findet im Web häufiger Seiten, die Verweise mit anderen Protokollen als HTTP einsetzen. Ein Beispiel ist das <code>mailto:</code> Protokoll:</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>Seitenersteller können <code>mailto:</code> Verweise nutzen, wenn sie einen bequemen Weg anbieten möchten, E-Mails direkt aus ihrer Webseite heraus zu versenden. Wird der Link aktiviert, sollte der Browser das im Betriebssystem eingestelle Standardprogramm für E-Mail starten. Das ist ein Beispiel für einen desktopbasierten Protokoll-Handler.</p>

<p>Webbasierte Protokoll-Handler erlauben webbasierten Anwendungen ebenfall an solchen Prozessen teilzunehmen. Das wird mit der Migration vieler Anwendungen ins Web zunehmend wichtiger. Tatsächlich gibt es bereits viele Webanwendungen, die einen <code>mailto:</code> Verweis verarbeiten könnten.</p>

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

<p>Das Einrichten einer webbasierten Anwendung als Protokoll-Handler ist unkompliziert. Die Webapp nutzt <code><a href="/en-US/docs/Web/API/navigator.registerProtocolHandler" title="DOM/window.navigator.registerProtocolHandler">registerProtocolHandler()</a></code>, um sich selbst beim Browser als potentiellen Handler für ein bestimmtes Protokoll zu registrieren. Ein Beispiel:</p>

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

<p>Die Parameter sind:</p>

<ul>
 <li>Das Protokoll.</li>
 <li>Das URL Template, das als Handler genutzt werden soll. Das "%s" wird durch das <code>href</code> Attribut des Verweises ersetzt und ein GET Request mit der resultierenden URL ausgeführt.</li>
 <li>Der nutzerlesbare Name des Protokoll Handlers.</li>
</ul>

<p>Führt ein Browser diesen Code aus, wird er über einen Dialog die Erlaubnis des Nutzers einholen, die Webanwendung als Handler für dieses Protokoll zu registrieren. Firefox zeigt eine Nachricht in der Notification Bar:</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>Hinweis: </strong>Das bei der Registrierung angegebene URL Template <strong>muss</strong> mit der die Anfrage stellenden Webseite <strong>übereinstimmen</strong>, oder die Registrierung schlägt fehl. Beispielsweise kann <code class="plain">http://example.com/homepage.html</code> einen Protokoll-Handler für <code class="plain">http://example.com/handle_mailto/%s registrieren, aber nicht für</code> <code class="plain">http://example.<em><strong>org</strong></em>/handle_mailto/%s</code>.</div>

<p>Wird derselbe Handler mehrfach registriert, meldet der Browser das durch ein weiteres Pop-Up, das auf die bereits erfolgte Registrierung hinweist. Daher ist es sinnvoll, die Registrierung mit einem vorangehenden Check abzusichern.</p>

<h3 id="Example" name="Example">Beispiel</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;Web Protocol Handler Sample - Register&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;Web Protocol Handler Sample&lt;/h1&gt;
  &lt;p&gt;This web page will install a web protocol handler for the &lt;code&gt;fake:&lt;/code&gt; protocol.&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>

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

<p>Ab jetzt wird der Browser bei jedem Klick auf einen Verweis, der das neu registrierte Protokoll verwendet, die Ausführung auf die registrierte URL umleiten. Firefox wird zuvor standardmäßig die Bestätigung durch den Nutzer einholen.</p>

<h3 id="Example_2" name="Example_2">Beispiel</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;Web Protocol Handler Sample - Test&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;p&gt;Hey have you seen &lt;a href="burger:cheeseburger"&gt;this&lt;/a&gt; before?&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>

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

<p>Der nächste Schritt ist das tatsächliche Handling. Der Browser kombiniert die <code>href </code>aus dem aktivierten Link mit dem registrierten URL Template und führt dann damit einen HTTP GET Request aus. Hervorgehend aus den vorangegangenen Beispielen würde der Request auf folgender URL stattfinden:</p>

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

<p>Serverseitiger Code kann dann die query String Parameter extrahieren und die gewünschte Aktion ausführen.</p>

<div class="note"><strong>Hinweis:</strong> Dem serverseitigen Code wird der <strong>gesamte </strong>Inhalt der href übergeben. D.h. der Server muss das Protokoll aus den Daten parsen.</div>

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

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

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;title&gt;Web Protocol Handler Sample&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1&gt;Web Protocol Handler Sample - Handler&lt;/h1&gt;
  &lt;p&gt;This web page is called when handling a &lt;code&gt;burger:&lt;/code&gt; protocol action. The data sent:&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">Verweise</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">Siehe auch</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> (XUL only)</li>
 <li><a class="external" href="http://blog.mozilla.com/webdev/2010/07/26/registerprotocolhandler-enhancing-the-federated-web/">RegisterProtocolHandler Enhancing the Federated Web</a> at Mozilla Webdev</li>
</ul>