TWebBrowser navegando com a versão 11 do IE.

Hoje vou compartilhar uma dica interessante:

Como fazer o componente TWebBrowser do Delphi usar a versão 11 do Internet Explorer

Introdução:
TWebBrowser prove acesso a funcionalidades do “Microsoft’s Shell Doc Object and Control Library” (SHDOCVW.DLL), ou seja é um componente para exibição de paginas hml.

Problema:
Essa dll por padrão usa a versão 4 ou 7 do Internet Explorer, mesmo que o usuário atualize o navegador para o o IE 11, ele continuará a usar essa configuração antiga.

Solução:
Configura o registro para usar a versão instalada do IE
no windows 10, abra o regedit e navegue para a chave:

jhneabnjngeiakje
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATIONCrie dentro de FEATURE_BROWSER_EMULATION uma nova chave REG_DWORD com o nome do executável que esta usando o TWebBroser.
no meu exemplo estou usando o internet explorer 11 então devo criar a chave com o nome onix.exe e valores hexadecimal 2af9 ou decimal 11001

miofpmpoadiapjep
para outras versões usar:

Value Description
11001 (0x2AF9 Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directive causes the page to load in Quirks.
11000 (0x2AF8) IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.
10001 (0x2711) Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive.
10000 (0x02710) Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.
9999 (0x270F) Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the declared !DOCTYPE directive. Failing todeclare a !DOCTYPE directive causes the page to load in Quirks.
9000 (0x2328) Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.

Important  In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
8888 (0x22B8) Webpages are displayed in IE8 Standards mode, regardless of the declared !DOCTYPE directive. Failing to declare a !DOCTYPE directivecauses the page to load in Quirks.
8000 (0x1F40) Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8

Important  In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
7000 (0x1B58) Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.

feche o registro e abra o sistema:

Abaixo como estava antes de mudar a configuração
Antes de mudar a configuração:

ncjeigclnamkcnfp

após gravar o registro e executar o sistema novamente.
kkfcaikjlljeblii
Abraços
Marcos Nielsen

6 comentários em “TWebBrowser navegando com a versão 11 do IE.

Adicione o seu

  1. Super útil este artigo, me salvou de um grande problema.
    Bom agora estou enfrentando outro problema que é na finalização da aplicação que ela simplesmente não finaliza(mesmo usando application.terminate). Ela fecha porém continua na memória.
    Como informação adicional, faço uso de uma variável IHTMLWindow2 para execuções de uns script. Alguma dica de como posso resolver?
    Abraços.

    1. Olá Márcio,
      Obrigado pelo comentário,

      Normalmente o problema da aplicação ficar presa na memória esta relacionada ao fato de não fazermos liberação dos objetos que criamos!
      se o objeto for herdado de TPersistente use SELF nos seus construtores em vez de Nil. isso faz que se seu Objeto seja liberada corretamente da memorio quando o sei form Main for fechado!

      Se não for isso, e o erro for da interface (na teoria elas são liberadas sozinhas da memória), mande um projeto de exemplo com seu erro para que eu passa analisar!

      Abraços!

  2. Legal mesmo artigo! Tive uma esperança, mas no meu caso não deu certo. Pelo menos na URL que tenho que abrir. Meu erro aqui de javascript é: “Promise” não está definido

    Na página é uma mensagem modal que aparece.

  3. Olá Marquesleao e Bruno Alves Guerreiro
    com relação a Promise não esta definido, teste se a sua pagina abre sem erro no proprio IE11. pois esse erro pode ser uma feature não implementada no IE11(e muitos recursos do HTML5 não são).

    Sobre os erros que estão ocorrendo com script, refiz o programa usando Delphi 10.2.3 em um windows 10 64Bits e os erros do script não ocorreram.

    Peço que revise se esta criando a chave corretamente no registro dentro da pasta
    “Computador\HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\”

    Também é possível fazer com que que sua própria aplicação se registre automaticamente com o seguinte código:
    procedure TForm1.SetPermissions;
    //http://docwiki.embarcadero.com/Libraries/Tokyo/en/FMX.WebBrowser.TWebBrowser
    const
    cHomePath = ‘SOFTWARE’;
    cFeatureBrowserEmulation = ‘Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\’;
    cIE11 = 11001;
    var
    Reg : TRegIniFile;
    sKey: string;
    begin
    sKey := ExtractFileName(ParamStr(0));
    Reg := TRegIniFile.Create(cHomePath);
    try
    if Reg.OpenKey(cFeatureBrowserEmulation, True) and not(TRegistry(Reg).KeyExists(sKey) and (TRegistry(Reg).ReadInteger(sKey) = cIE11)) then
    TRegistry(Reg).WriteInteger(sKey, cIE11);
    finally
    Reg.Free;
    end;
    end;

    agora invoque o método no construtor dentro do create do seu form
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    SetPermissions;
    WebBrowser1.Navigate(‘www.seusite.com.br’);
    end;

    baixe aqui os fontes do exemplo que se registra automaticamente :
    https://www.4shared.com/zip/smmJLAzpgm/Demo_TWebBrower_com_InternetEx.html

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

WordPress.com.

Acima ↑

%d blogueiros gostam disto: