Definição Do Modo De Compatibilidade No Internet Explorer 8
O procedimento para definir o modo de compatibilidade do Internet Explorer 8 estão bem documentados aqui. No entanto, tenho me apercebido de que muitos programadores e administradores de sistemas desconhecem isto.
Apesar de se poder (e dever) definir o modo de compatibilidade para o qual as páginas foram desenvolvidas, se al não for eito, o Internet Explorer 8 e o Web Browser Control usarão os seguintes modos:
| Aplicação | Intranet | Internet |
| Internet Explorer 8 | modo IE7 | modo IE8 |
| Aplicação hospedando o Web Browser Control | modo IE7 | modo IE7 |
Se notarem no quadro acima, por omissão (e não defeito), apenas o Internet Explore 8 se anuncia como Internet Explorer 8 e apenas para sítios da Internet.
O modo como o Internet Explorer (e qualquer outro navegador) se anuncia perante um servidor é usando a sua user-agent string:
| Modo | User Agent String |
| IE7 | Mozilla/4.0 (compatible; MSIE 7.0; …; Trident/4.0; …) |
| IE8 | Mozilla/4.0 (compatible; MSIE 8.0; …; Trident/4.0; …) |
(Se estão interessados em saber mais acerca da história da user-agent string, leiam a História da user-agent string)
A Microsoft fez isto para manter a compatibilidade com aplicações empresariais, mas pode trazer algumas complicações ao desenvolvimento.
Quem estiver a desenvolver uma aplicação web para o Internet Explorer 8 dirigida ao públic (Internet), pode ver o mesmo na sua máquina de desenvolvimento. Já a equipa de testes (normalmente testando na intranet) poderá ver as páginas como estando no Internet Explorer 7. Se a aplicação é para ser acedida a partir de uma aplicação que hospeda o Web Browser Control e quem desenvolve não testar nessa aplicação, então não está a er a mesma coisa.
Para saber como o navegador se está a anunciar ao servidor na Internet, há diversos sítios que mostrarão a informação de user-agent string (como o http://www.useragents.org/) e ajuda ter o mesmo na intranet. Quem pretender construír uma aplicação destas usando ASP.NET, pode usar a propriedade UserAgent da lasse HttpRequest (ou a propriedade Browser, para informação mais detalhada).
Este tipo de informação também está disponível no Internet Explorer através do objecto navigator.
O Giorgio Sardo tem algumas funções para detectar o Internet Explorer 8 mas quem quiser desenvolver uma página (ou parte) de diagnóstioco para mostrar as característicasdo navegador, pode usar algo como isto:
<fieldset id="webBrowserInfo">
<legend>Web Browser</legend>
<table border="1">
<tr>
<td class="label" style="width: 100px"><label for="webBrowser$userAgent">userAgent</label> </td>
<td class="value" colspan="3"><span id="webBrowser$userAgent"></span></td>
</tr>
<tr>
<td class="label" style="width: 100px"><label for="webBrowser$appVersion">appVersion</label></td>
<td class="value"><span id="webBrowser$appVersion"></span></td>
<td class="label"><label for="webBrowser$appMinorVersion">appMinorVersion</label></td>
<td class="value"><span id="webBrowser$appMinorVersion"></span></td>
</tr>
<tr>
<td class="label" style="width: 100px"><label for="webBrowser$appCodeName" style="width: 600px">appCodeName</label></td>
<td class="value" colspan="3"><span id="webBrowser$appCodeName"></span></td>
</tr>
<tr>
<td class="label"><label for="webBrowser$appName">appName</label></td>
<td class="value" colspan="3"><span id="webBrowser$appName"></span></td>
</tr>
<tr>
<td class="label" style="width: 100px"><label for="webBrowser$userLanguage">userLanguage</label></td>
<td class="value"><span id="webBrowser$userLanguage"></span></td>
<td class="label" style="width: 100px"><label for="webBrowser$cpuClass">cpuClass</label></td>
<td class="value"><span id="webBrowser$cpuClass"></span></td>
</tr>
<tr>
<td class="label"><label for="webBrowser$systemLanguage">systemLanguage</label></td>
<td class="value"><span id="webBrowser$systemLanguage"></span></td>
<td class="label"><label for="webBrowser$platform">platform</label></td>
<td class="value"><span id="webBrowser$platform"></span></td>
</tr>
<tr>
<td class="label"><label for="webBrowser$browserLanguage">browserLanguage</label></td>
<td class="value"><span id="webBrowser$browserLanguage"></span></td>
<td class="label" style="width: 100px"><label for="webBrowser$cookieEnabled">cookieEnabled</label></td>
<td class="value" colspan="5"><span id="webBrowser$cookieEnabled"></span></td>
</tr>
</table>
</fieldset>
<script type="text/javascript">
document.getElementById("webBrowser$userAgent").innerHTML = window.navigator.userAgent;
document.getElementById("webBrowser$appCodeName").innerHTML = window.navigator.appCodeName;
document.getElementById("webBrowser$appMinorVersion").innerHTML = window.navigator.appMinorVersion;
document.getElementById("webBrowser$appName").innerHTML = window.navigator.appName;
document.getElementById("webBrowser$appVersion").innerHTML = window.navigator.appVersion;
document.getElementById("webBrowser$browserLanguage").innerHTML = window.navigator.browserLanguage;
document.getElementById("webBrowser$cookieEnabled").innerHTML = window.navigator.cookieEnabled;
document.getElementById("webBrowser$cpuClass").innerHTML = window.navigator.cpuClass;
document.getElementById("webBrowser$platform").innerHTML = window.navigator.platform;
document.getElementById("webBrowser$systemLanguage").innerHTML = window.navigator.systemLanguage;
document.getElementById("webBrowser$userLanguage").innerHTML = window.navigator.userLanguage;
</script>