ASP.NET představily technologii adaptivního renderování. Jedná se v zásadě o to, že si runtime zjistí, který browser uživatel používá a podle toho upraví generovaný kód. Což o to, myšlenka je to dobrá, ale poněkud zpozdilá. Tato funkce by se hodila v době, kdy nezanedbatelná část uživatelů používala příšerný bazmek jménem Netscape Communicator.
Teď je spíš pro zlost, neboť ve standardním nastavení nepozná Mozillu jako "advanced browser". Takže nabývá dojmu, že nepodporuje CSS a podobně a posílá mu jiný kód, než IE, čímž úspěšně rozhodí zobrazení.
Řešení hrubou silou
Hrubou silou lze celý shora uvedený cirkus vypnout tím, že se do direktivy @Page
uvede atribut clientTarget="uplevel"
. Tím se runtime vnutí myšlenka, že se výsledek má renderovat pro "pokročilé" prohlížeče, bez ohledu na to, co klient používá.
Řešení učením
Celý komplikovaný proces adaptivního renderingu je závislý na technologii browser capabilities. Ta funguje tak, že identifikuje klienta a podle vlastní databáze schopností jednotlivých zařízení určí, které technologie podporuje a které ne. Bližší informace najdete například na stránkách společnosti Cyscape.
Tato databáze je samozřejmě uživatelsky modifikovatelná. Přislušná pravidla najdete v souboru machine.config v sekci <browserCaps>
. Jedná se o standardní součást .NET konfigurace. V rámci autora jedné aplikace tedy můžete problém s Mozillou vyřešit tím, že do sekce /configuration/system.web
souboru web.config přidáte následující:
<browserCaps> <case match="Gecko/[-\d]+"> browser=Netscape frames=true tables=true cookies=true javascript=true javaapplets=true ecmascriptversion=1.5 w3cdomversion=1.0 css1=true css2=true xml=true tagwriter=System.Web.UI.HtmlTextWriter <case match="rv:1.0[^\.](?'letters'\w*)"> version=6.0 majorversion=6 minorversion=0 <case match="^b" with="${letters}"> beta=true </case></case><case match="rv:1(\.\d+)(\.\d)?(?'letters'\w*)"> version=7.0 majorversion=7 minorversion=0 <case match="^b" with="${letters}"> beta=true </case></case></case> </browserCaps>