Webbasierte Protokoll-Handler

Hintergrund

Man findet im Web h├Ąufiger Seiten, die Verweise mit anderen Protokollen als HTTP einsetzen. Ein Beispiel ist das mailto: Protokoll:

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

Seitenersteller k├Ânnen mailto: 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.

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 mailto: Verweis verarbeiten k├Ânnten.

Registrierung

Das Einrichten einer webbasierten Anwendung als Protokoll-Handler ist unkompliziert. Die Webapp nutzt registerProtocolHandler(), um sich selbst beim Browser als potentiellen Handler f├╝r ein bestimmtes Protokoll zu registrieren. Ein Beispiel:

navigator.registerProtocolHandler("burger",
                                  "http://www.google.co.uk/?uri=%s",
                                  "Burger handler");

Die Parameter sind:

  • Das Protokoll.
  • Das URL Template, das als Handler genutzt werden soll. Das "%s" wird durch das href Attribut des Verweises ersetzt und ein GET Request mit der resultierenden URL ausgef├╝hrt.
  • Der nutzerlesbare Name des Protokoll Handlers.

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:

Hinweis: Das bei der Registrierung angegebene URL Template muss mit der die Anfrage stellenden Webseite ├╝bereinstimmen, oder die Registrierung schl├Ągt fehl. Beispielsweise kann http://example.com/homepage.html einen Protokoll-Handler f├╝r http://example.com/handle_mailto/%s registrieren, aber nicht f├╝r http://example.org/handle_mailto/%s.

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.

Beispiel

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
  <title>Web Protocol Handler Sample - Register</title>
  <script type="text/javascript">
    navigator.registerProtocolHandler("burger",
                                  "http://www.google.co.uk/?uri=%s",
                                  "Burger handler");
  </script>
</head>
<body>
  <h1>Web Protocol Handler Sample</h1>
  <p>This web page will install a web protocol handler for the <code>fake:</code> protocol.</p>
</body>
</html>

Aktivierung

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.

Beispiel

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
  <title>Web Protocol Handler Sample - Test</title>
</head>
<body>
  <p>Hey have you seen <a href="burger:cheeseburger">this</a> before?</p>
</body>
</html>

Handling

Der n├Ąchste Schritt ist das tats├Ąchliche Handling. Der Browser kombiniert die href 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:

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

Serverseitiger Code kann dann die query String Parameter extrahieren und die gew├╝nschte Aktion ausf├╝hren.

Hinweis: Dem serverseitigen Code wird der gesamte Inhalt der href ├╝bergeben. D.h. der Server muss das Protokoll aus den Daten parsen.

Beispiel

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>Web Protocol Handler Sample</title>
</head>
<body>
  <h1>Web Protocol Handler Sample - Handler</h1>
  <p>This web page is called when handling a <code>burger:</code> protocol action. The data sent:</p>
  <textarea>
<?php echo(htmlspecialchars($value, ENT_QUOTES, 'UTF-8')); ?>
  </textarea>
</body>
</html>

Verweise

Siehe auch