Jak přidat vyhledávání na stránkách do IE 7.0

ScreenshotPokud používáte aktuální beta verzi Internet Exploreru 7.0, možná jste si všimli, že vám při příchodu na tento web šipka vedle vyhldávacího políčka změnila barvu na oranžovou a v seznamu vyhledávačů se objevil web ASPNET.CZ.

Jak tedy přidat vlastní vyhledávání do IE? Celá operace má dvě části (předpokládáme-li, že už na webu máte funkční vyhledávání). Musíte vytvořit dokument v XML formátu OpenSearch a pak do hlavičky stránky přidat odkaz na něj.

Technologie OpenSearch

OpenSearch je otevřený standard pro komunikaci vyhledávačů, vytvořený společností Amazon. Pro tento účel nás z něj zajímá pouze malá část, specifikující adesu na níž lze zadat požadavek na vyhledávání. Jedná se o jednoduchý XML dokument, který obsahuje název webu, popis webu a adresu pro vyhledávání. Pro ASPNET.CZ vypadá takto:

<?xml version="1.0" encoding="utf-8" ?>

<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">

  <ShortName>ASPNET.CZ (fulltext)</ShortName>

  <Description>Všechno co jste kdy chtěli vědět o ASP.NET a neměli se na to koho zeptat.</Description>

  <Url type="text/html">http://www.aspnet.cz/Search.aspx?Text={searchTerms}</Url>

</OpenSearchDescription>

Tento dokument uložte někam na váš web. Můžete ho napsat staticky, mně ho generuje dynamicky redakční systém na adrese http://www.aspnet.cz/AutoDiscovery.ashx?Type=OpenSearch

Odkaz v Internet Exploreru

Aby prohlížeč tento dokument mohl využít, musí o něm vědět. K tomu slouží odkaz v hlavičce (sekci head) stránky. Přidejte do ní element link s následujícími parametry: 

<link rel="search"

      type="application/opensearchdescription+xml"

      xmlns="http://www.microsoft.com/MSCOM/MNP2/Schemas"

      href="http://www.aspnet.cz/AutoDiscovery.ashx?type=OpenSearch"

      title="ASPNET.CZ (fulltext)" />

Atributy rel, type a xmlns umožňují prohlížeči identifikovat, že se jedná o odkaz na dokument o vyhledávání. Atribut href obsahuje vlastní adresu specifikace. Tato adresa musí být kompletní absolutní URL, tedy včetně názvu serveru, nestačí napsat jenom cestu.

Pokud učiníte tyto dva kroky, bude Internet Explorer o všem vyhledávání vědět a nabídne výše uvedeným postupem uživatelům možnost, aby si váš web přidali mezi používané vyhledávače.

Titulek:
Text komentáře:
Vaše jméno:
Váš e-mail: (nebude zveřejněn)

WWW stránka:
Opište text z obrázku:

Z recese jsem to vyzkoušel, i když moje malé projektíky se na to vůbec nehodí. Jak říkám, jen tak pro zkoušku - zajímalo mne to.:)

Bohužel, stránka pak neprojde validátorem na XHTML 1.00 Transitional, na vině je připsaný prostor názvů xmlns="http://www.microsoft.com/MSCOM/MNP2/Schemas" do linku, kde W3C validátor nahlásí chybu. Co s tím ? Sice se domnívám, že většina autorů webů, kdyby to potřebovali, se tohle vybodne, ale třeba je řešení.

Podle mého názoru by to validní být mělo, protože to není HTML konstrukce, ale XML konstrukce a tudíž by si jí ten validátor v podstatě neměl ani všimnout. Nicméně mohu se mýlit, řešení zatím nemám.

Nahlédl jsem do knížky od Jirky Koska a současně zkusil použít syntaxi načtení jmenného prostoru jen pro konkrétní element takto xmlns:link="http://www.microsoft.com/MSCOM/MNP2/Schemas"...jenže ani to nezabralo. V posledním odstavci však JK píše, že většina parserů a validátorů si s vícečetnými názvy jmenných prostorů neumějí poradit, i když zápis je dle XML správně. Snad by stálo se jej zeptat. V čistém XML to je samozřejmě v pořádku. Takže je pravděpodobně chyba ve validátoru na W3C.

Při nejbližším vhodném MVP chatu to nareportuju do MS, ale obecně to nehodlám moc řešit.

Jednak mi přijde pravděpodobné, že je to chyba validátoru (resp. možná ani tak ne chyba, jako prostě omezení architektury). Druhak je možné, že se to do ostré verze změní.

Teď jsem zjistil, že si IE7 poradí i pokud tam atribut 'xmlns' chybí. Stačí pokud je tam správný content-type 'application/opensearchdescription+xml'. Já si říkal, že je tam ten namespace nadbytečný, že by si měli vystačit s linkem tak, jak je.

Element <Url type="text/html">http://www.aspnet.cz/Search.aspx?Text={searchTerms}</Url> má vypadat takto: <Url type="text/html" template="http://www.aspnet.cz/Search.aspx?Text={searchTerms}"/>. Pak to již funguje správně.

Článek byl asi psán v době, kdy byl IE7 ještě v betaverzi, takže od té doby se to změnilo. Faktem ale je, že OpenSearch teď negunguje ani na tomto webu.

  • Altairis
  • Nemesis
  • Microsoft MVP
  • IIS
  • ASP.NET