Como fazer o componente TwebBrowser usar/emular uma versão específica do IE.

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:

ie_erro_script_wrongIEversion_automalabs.com.br

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:

Isso instrui o mecanismo do IE a exibir o documento como se fosse o IE9

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.

  1. Michelle Fabiana Diniz’s avatar

    Muito bom! Me ajudou bastante! Valeu!

    Responder

  2. Marques Leão’s avatar

    Não funcionou!

    Responder

  3. Marques Leão’s avatar

    Continua aparecendo erro de script!

    Responder

    1. Gleison Gomes’s avatar

      Coloque a propiedade Silent := True;
      Webbrowser1.Silent := True;

      Responder

      1. MARCIO’s avatar

        Valeu amigo, resolveu um bug de anos aqui no meu sistema. Grato

        Responder

      2. lucas’s avatar

        Ótimo… Funcionou perfeitamente.

        Responder

Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *