Použijte v aplikaci vlastní protokol

Většina webdesignerů zná uživatelské protokoly – nebo minimálně jednoho jejich zástupce, protokol „mailto:“. Ten lze použít v odkazech, které po kliknutí otevřou mailový program. Ale co když tím mailovým programem má být webová aplikace? Lze to nějak zařídit? A lze zařídit i jiné protokoly?

Prohlížeče umí zpracovat (detaily naleznete v nastavení) nejrůznější typy obsahu (podle MIME typu) a různé protokoly (mailto:, ftp:, mms: atd.) Buď ví, jak s nimi naložit, nebo má registrované obslužné aplikace, kterým předá potřebné parametry. S rostoucím počtem webových aplikací se stále častěji objevují situace, kdy by bylo vhodné jako obslužné programy nastavit právě některou webovou aplikaci – kupříkladu Hotmail nebo GMail jako obsluhu pro odkazy „mailto:“

Prohlížeč Opera nabízí možnost nastavit takové aplikace pro „mailto“ pomocí konfiguračního souboru webmailprovider­s.ini.

Návrh HTML5 od WhatWG obsahuje tzv. Custom Handlers, neboli uživatelské „ovladače“. Jsou určeny pro zpracování speciálních protokolů (lépe řečeno schémat) a typů obsahu (Content-Type). Návrh zavádí dvě nové metody objektu  navigator:

  • registerProto­colHandler(sché­ma, URL, název)
  • registerConten­tHandler(MIME, URL, název)

Tyto funkce slouží k registraci ovladače vlastního protokolu, resp. MIME typu. Parametr název pojmenovává protokol / MIME typ, parametr URL udává adresu, na které webová aplikace takový požadavek obslouží. U registrace protokolu je schéma název schématu (mailto, ftp, mms atd.), u registrace ovladače pro obsah je prvním parametrem MIME typ, kterého se má ovladač týkat.

Příklad

navigator.registerProtocolHandler("mailto", "http://example.com/mail.php?q=%s", "Můj mail");

Toto volání zaregistruje ovladač pro protokol mailto. Pokud uživatel klikne na nějaké stránce na  odkaz s mailto, např.:

<a href="mailto:redakce@zdrojak.cz">Mail redakci</a>

použije prohlížeč uživatelsky definovanou obsluhu, tzn. otevře stránku  http://example.com/mail.php?q=mailto%3Aredakce%40zdrojak%2Ecz. Parametr %s, použitý v URL, je nahrazen celým odkazem, tedy i s  mailto:.

Bezpečnost

Při volání metod registerXXXHandler() kontroluje prohlížeč, zda doména, použitá v URL, je shodná s doménou, z níž byla načtena stránka, která se o registraci pokouší. Nelze tak z domény foo.com registrovat ovladač, který by otvíral stránku na doméně bar.com.

Implementace

Stav implementace těchto funkcí je následující:

registerConten­tHandler je implementován ve Firefoxu od verze 2. Lze použít pouhé 3 MIME typy: application/vnd.mozilla.maybe.feed, application/atom+xml a application/rss+xml. Všechny tři jsou navíc ekvivalentní a všechny obdrží veškerý obsah s MIME typem, odpovídajícím RSS nebo ATOMu. Jiné typy zatím registrovat touto funkcí nelze. Ostatní prohlížeče metodu registerConten­tHandler nepodporují.

registerProto­colHandler je implementován ve Firefoxu od verze 3 a v Chrome od verze 13 (nyní v beta channel). Mezi implementacemi je rozdíl – zatímco Firefox umožní registrovat si jakýkoli vlastní protokol (např. „evernote“ pro přidání odkazu do poznámek), u Chrome musí vlastní protokol začínat řetězcem „web+“. Bez něho lze předefinovat pouze protokoly „mailto“, „mms“, „nntp“, „rtsp“ a „webcal“.

Ukázka

Ukázkovou stránku naleznete na adrese ukazky.zdrojak­.cz/protocol. Nejprve je potřeba zaregistrovat protokol – použili jsme protokol „web+zdrojak“, kvůli kompatibilitě s prohlížečem Chrome:

navigator.regis­terProtocolHan­dler(„web+zdro­jak“, „https://www.zdrojak.cz/wp-content/uploads/ukazka/pro­tocol/obsluha­.php?v=%s“, „Zdrojak User Protocol“);

Pokud máte takto zaregistrovaný protokol, budou všechny odkazy ve tvaru <a href="web+zdrojak:blablabla"> otevřeny jako stránka https://www.zdrojak.cz/wp-content/uploads/ukazka/pro­tocol/obsluha­.php?v=web+zdro­jak:blablabla.

Při volání této metody bude prohlížeč požadovat od uživatele schválení:

Kliknutím na odkaz se otevře dialog s dotazem, jak odkaz zpracovat, zda použít registrovaný protokol, nebo nějakou vlastní aplikaci:

Pohledem do Nastavení v prohlížeči zjistíme, že v seznamu aplikací přibyl náš uživatelsky definovaný protokol.

Po registraci protokolu na stránce ukazky.zdrojak­.cz/protocol můžeme vyzkoušet fungování odkazů – lze i zde:

Odkazy mají různý tvar – vždy začínají web+zdrojak: a následují parametry. Ty jsou vyhodnoceny obslužným skriptem. V případě parametru začínajícího „n/“, je uživatel přesměrován na určený štítek zde na Zdrojáku, pokud parametr začíná „q/“, je přesměrován na hledání. Jinak se pouze vypíše parametr na výstup.

Rozdíly

Jak ve Firefoxu (testováno ve verzi 5), tak v Chrome (13) fungují takové odkazy naprosto perfektně při kliknutí myši. Pokud je vložíme do adresního řádku prohlížeče, chovají se různě: ve Firefoxu otevřou stránku tak, jak je definována v obsluze. U Chrome vede zadání odkazu v tomto tvaru do adresního řádku ke spuštění vyhledávání.

Na registrační stránce je použit i element <img>, který má nastavenu adresu obrázku na src="web+zdrojak:otr"  – taková adresa je ovladačem zpracována tak, že je poslán obrázek ve formátu PNG. Při zadání adresy do adresního řádku zobrazí FF obrázek, Chrome spustí hledání. Při použití v elementu IMG nezobrazí Firefox nic, Chrome zobrazí obrázek.

Poznámka: Při registraci ovladače se dvojtečka za schéma nepíše, v odkazu se píše (a je předána i do ovladače).

Uživatelské protokoly

Uživatelské ovladače protokolů mohou nalézt uplatnění ve webových aplikacích, jako jsou kalendáře, maily, poznámkové bloky, správce odkazů atd. Lze je použít jak pro předefinování některých existujících schémat (a tím tedy pro přesměrování obsluhy mailů, multimédií atd. na vlastní aplikaci), tak i pro vytvoření vlastních protokolů pro vlastní aplikaci.

Nevýhodou může být zatím poměrně špatná podpora v prohlížečích – Firefox sice podporuje metodu registerProto­colHandler od verze 3 (ContentHandler dokonce od verze 2), ale až donedávna to byl jediný prohlížeč (a pokud nepočítáme betaverzi, tak je to stále jediný „oficiální“ prohlížeč).

Další literatura

Začal programovat v roce 1984 s programovatelnou kalkulačkou. Pokračoval k BASICu, assembleru Z80, Forthu, Pascalu, Céčku, dalším assemblerům, před časem v PHP a teď by rád neprogramoval a radši se věnoval starým počítačům.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 4

Přehled komentářů

Opravdový odborník :-) první!
Martin Malý Re: první!
Oxymoron Re: první!
Viktor Re: první!
Zdroj: https://www.zdrojak.cz/?p=3520