Řešení problémů se zobrazováním ASP.NET prvků v Mozille

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>
  • Altairis
  • Nemesis
  • Microsoft MVP
  • IIS
  • ASP.NET