Isso é para quem programa em C++, Delphi, etc e usa o componente twebbrowser para construir um programa baseado em navegador.
Como todos devem saber esse componente usa o engine do Internet Explorer instalado no Windows. O que você talvez não saiba é que por default esse engine quando é “embarcado” em um programa é configurado para entrar em um modo de compatibilidade onde personifica uma versão anterior do IE. Até mesmo no Windows 8.1 de 64bits com o IE11 instalado seu programa vai emular o IE7.
O resultado disso é que certas páginas que abrem sem qualquer problema no IE da máquina vão acusar erro no seu programa. Os mais comuns são erros de script como este:
Para saber que versão do IE seu programa está emulando faça-o abrir uma página que diga isso, como http://www.useragentstring.com/
Método 1
Isso é configurável pelo Registro. Você precisa ir na chave:
HKEY_LOCAL_MACHINE (ou HKEY_CURRENT_USER)
SOFTWARE
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_BROWSER_EMULATION
E adicionar um item “NomedoSeuPrograma.exe” com um valor DWORD que corresponde à versão do IE que você quer que seu programa use.
A lista dos valores pode ser vista aqui. Em resumo (valores em DECIMAL):
- 11001 – IE 11 modo Edge
- 11000 – IE11
- 10001 – IE10 forçado – ignora !DOCTYPE
- 10000 – IE10
- 9999 – IE9 forçado – ignora !DOCTYPE
- 9000 – IE9
- 8888 – IE8 forçado – ignora !DOCTYPE
- 8000 – IE8
- 7000 – IE7
Se fizer a inclusão em HKEY_LOCAL_MACHINE isso val valer para todos os usuários da máquina, mas requer privilégios de administrador para isso. Já a inclusão em HKEY_CURRENT_USER vale apenas para o usuário atual mas seu programa pode mexer nessa chave sem precisar de privilégios.
Você não pode emular uma versão do IE superior à instalada na máquina.
Método 2
Você também pode definir isso via HTML. Não vai precisar mexer no Registro mas cada página precisará ser alterada. Obviamente só é viável quando todas as páginas que seu programa vai exibir são criadas por você.
Basta acrescentar algo assim em HEAD:
1 |
<meta http-equiv="X-UA-Compatible" content="IE=9" /> |
Isso instrui o mecanismo do IE a exibir o documento como se fosse o IE9
1 |
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
Isso instrui o mecanismo do IE a exibir o documento como se fosse o Edge
Mais uma vez, você não pode emular uma versão do IE superior à instalada na máquina.
Muito bom! Me ajudou bastante! Valeu!
Não funcionou!
Continua aparecendo erro de script!
Coloque a propiedade Silent := True;
Webbrowser1.Silent := True;
Valeu amigo, resolveu um bug de anos aqui no meu sistema. Grato
Ótimo… Funcionou perfeitamente.