Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

HTML5 aplikace pro Windows Phone 7

V článku si vysvětlíme základní principy, jak fungují HTML5 aplikace na mobilních zařízeních (nejen) se systémem Windows Phone 7. Podíváme se podrobněji na to, jak mohou získávat informace z telefonu, a ukážeme si jednoduchou „hybridní“ aplikaci, která dokáže komunikovat s operačním systémem telefonu.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Webové aplikace a mobilní telefony obecně

Mobilních platforem je na našem trhu celá řada – Windows Phone, iOS, Android, Symbian, Blackberry a MeeGo. Jedno však mají společné, a to moderní webový prohlížeč podporující HTML5. Pokud vaši aplikaci v HTML5 spustíte přímo z webu, tak narazíte na několik problémů:

  1. Aplikace nemůže přistupovat ke zdrojům telefonu.
  2. Aplikace nemůžete přistupovat k datům v telefonu.
  3. XHR požadavky mohou odcházet pouze na doménu aplikace.
  4. Aplikaci nedostanete na Marketplace.

Řešení těchto problémů, které například používá oblíbená platforma PhoneGap, je vcelku jednoduché a univerzální. Webovou HTML5 aplikaci je třeba „obalit“ nativní aplikací pro danou platformu. Jednoduše řečeno: pro každou platformu vytvoříte nativní aplikaci, která bude obsahovat jen komponentu webového prohlížeče, ve které poběží vaše HTML5 aplikace. Tím odstraníte v podstatě všechny výše popsané problémy. U každé platformy bude postup samozřejmě trochu jiný, ale jako obecný princip to funguje.

Windows Phone

Ukažme si vytvoření „nativně-webové“ aplikace na platformě WP7.

Abychom odstranili všechny výše popsané problémy HTML5 aplikací na Windows Phone, je nutnou podmínkou běh aplikace z paměti telefonu. Při prvním spuštění je potřeba aplikaci uložit do IsolatedStorage. Webová aplikace může být součástí instalačního balíčku jako Resource nebo si ji může nativní aplikace při prvním spuštění stáhnout z internetu. V obou případech je nutné webovou aplikaci při prvním spuštění uložit do IsolatedStorage.

U ovládacího prvku WebBrowser, který vložíte do aplikace, pak musíte povolit skriptování nastavením vlastnosti IsScriptEnabled na true a zaregistrovat si událost ScriptNotify. Tato událost je vyvolána v případě, že vaše webová aplikace, běžící v této komponentě, zavolá z Javascriptového kódu metodu

window.external.notify(…);

Pokud potřebujete z nativní aplikace vyvolat JS funkci v právě otevřené stránce webové aplikace, tak použijete metodu InvokeScript ovládacího prvku WebBrowser.

Jednoduchý příklad

Vytvoříme si HTML5 aplikaci, která zobrazí jméno kontaktu z telefonu.

HTML5 aplikace

Protože je příklad jednoduchý, vystačíme si s pár řádky kódu.

<!DOCTYPE html>
<html>
 <head>
 <title>Mobile</title>
 <meta name="viewport" content="width=device-width"/>
 <script type="text/javascript">

 function SearchContact()
 {
  window.external.notify("SearchContact");
 }

 function ContactFound(email)
  {
   var contactEmailDiv=document.getElementById("contactEmail");
   contactEmailDiv.textContent=email;
  }
 </script>
</head>

<body>
 <h1>Contact</h1>
 <div id="contactEmail">
 </div>

 <div><input type="button" onclick="SearchContact()" value="Search
Contact"/></div>

</body>
</html>

Velmi důležité je použití meta tagu viewport, na základě kterého webový prohlížeč upravuje zobrazení stránky v mobilním zařízení. Funkce SearchContact má za úkol vyvolat událost v nativní aplikaci a předat hodnotu „SearchContact“.

Funkce CountactFound je pak vyvolána z nativní aplikace.

Nativní aplikace

Nejprve je potřeba HTML5 aplikaci uložit do paměti telefonu, tedy do IsolatedStorage. Postup, resp. načtení jednotlivých stránek, se bude lišit podle toho, zda je HTML5 aplikace k nativní aplikaci připojena jako Resource, nebo se nachází na webovém serveru. Postup pro uložení stránek HTML5 aplikace z Resources do IsolatedStorage najdete v článku How to: Display Static Web Content Using the WebBrowser Control for Windows Phone. Pokud budete stránky stahovat z internetu, bude kód načtení jiný:

private void FillCache()
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://...");
            request.BeginGetResponse(OnDataPage, request);
        }

        private void OnDataPage(IAsyncResult e)
        {
            HttpWebRequest request = (HttpWebRequest)e.AsyncState;

            try
            {
                HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(e);

                using (BinaryReader br = new BinaryReader(response.GetResponseStream()))
                {
                    byte[] data = br.ReadBytes((int)response.GetResponseStream().Length);
                    SaveToIsoStore(request.RequestUri.AbsolutePath, data);
                }

            }
            catch (Exception ex)
            {
                  //
            }
            finally
            {
                Dispatcher.BeginInvoke(() => FillCache());
            }
        }

Nezapomínejte, že veškerá komunikace Windows Phone telefonu s internetem je asynchronní.

Vlastní vložení ovládacího prvku WebBrowser do aplikace je velmi jednoduché. Do výchozí šablony Windows Phone aplikace, kterou vytvoří Visual Studio 2010, stačí ovládací prvek přetáhnout na příslušné místo přímo z panelu Toolbox.

U ovládacího prvku pak povolíme skriptování a zaregistrujeme si událost ScriptNotify.

<phone:WebBrowser Name="_webBrowser"IsScriptEnabled="True"ScriptNotify="_webBrowser_ScriptNotify"
/>

Hledání kontaktu

Kontakt začneme hledat po vyvolání události z HTML5 aplikace:

private void _webBrowser_ScriptNotify(object sender, NotifyEventArgs e)
{
    if (e.Value != "SearchContact")
    {
        return;
    }
Navigate Contacts c = new Contacts();
    c.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(c_SearchCompleted);
    c.SearchAsync(String.Empty, FilterKind.None, "Contacts Test #1");
}

Hledání kontaktu je opět asynchronní. Poté, co je kontakt nalezen, uvědomíme o tom HTML5 aplikaci:

void c_SearchCompleted(object sender, ContactsSearchEventArgs e)
{
    Contact c = e.Results.FirstOrDefault<Contact>();

    if (c == null)
    {
        return;
    }

    _webBrowser.InvokeScript("ContactFound", c.DisplayName);
}

Zobrazení HTML5 aplikace v ovládacím prvku WebBrowser

Vlastní zobrazení webové stránky v ovládacím prvku WebBrowser má na starost metoda Navigate. Pokud není v URI uveden protokol HTTP, bude se stránka hledat v IsolatedSto­rage.

Závěr

Pomocí HTML5 můžete začít snadno vytvářet i „nativní“ aplikace pro mobilní zařízení. Neříkám, že je to vhodné pro všechny typy aplikací, ale tento způsob jistě své uplatnění najde. Více informací, zejména jak nastavit prostředí pro vývoj a informaci o soutěži pro vývojáře Windows Phone aplikací, najdete na stránkách Vyvíjej!

Štěpán Bechynský

Specialista pro vývojové nástroje ve společnosti Microsoft v České republice.

Školení: Hackujeme operační systém Android

 

Školení vám ukáže, jak se dostat k Linuxu (tzv. "rootování"), který se pod hezkou tváří Androida skrývá a jak ho naplno využít. Pomůže vám to při záloze dat, zvětšování prostoru pro aplikace nebo sdílení připojení k internetu a pokud chcete z telefonu dostat opravdové maximum, ukážeme vám, jak v něm vyměnit kompletní systém za lepší.

Podrobnější informace a přihláška

Přehled názorů

SyntaxHighlighter
Petr Severa 2. 11. 2011 09:52
Nový
└ 
Re: SyntaxHighlighter
Martin Malý 2. 11. 2011 15:42
Nový
Odkazy v článku
chleba 2. 11. 2011 17:09
Nový
└ 
Re: Odkazy v článku
Petr Vlk 2. 11. 2011 18:10
Nový
 
└ 
Re: Odkazy v článku
Martin Malý 2. 11. 2011 18:31
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem