Pergunta

Recentemente, atualizei para o IE9-beta. Agora, no meu aplicativo .NET (3.5) Winform, eu quero usar WebBrowser ao controle.

Então minha pergunta é: se o WebBrowser O controle exibirá todas as propriedades e funções do IE9?

Minha preocupação é que quero renderizar alguns gráficos SVG.

Foi útil?

Solução

A "versão" do IE9 do controle WebBrowser, como a versão IE8, é na verdade vários navegadores em um. Ao contrário da versão do IE8, você tem um pouco mais de controle sobre o modo de renderização dentro da página, alterando o doctype. Obviamente, para alterar o modo do navegador, você deve definir seu registro como a resposta anterior. Aqui está um fragmento de arquivo REG para característica_browser_emulation:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"contoso.exe"=dword:00002328

Aqui está o conjunto completo de códigos:

  • 9999 (0x270f) - Internet Explorer 9. As páginas da Web são exibidas no modo de padrões IE9, independentemente da diretiva Doctype.
  • 9000 (0x2328) - Internet Explorer 9. Páginas da Web contendo padrões! Diretivas Doctype são exibidas no modo IE9.
  • 8888 (0x22b8) -WebPages são exibidos no modo de padrões IE8, independentemente da diretiva Doctype.
  • 8000 (0x1f40) - Páginas da Web que contêm padrões! As diretivas doctype são exibidas no modo IE8.
  • 7000 (0x1b58) - Páginas da Web que contêm padrões!

Os documentos completos:

http://msdn.microsoft.com/en-us/library/ee330730%28vs.85%29.aspx#browser_emulation

Outras dicas

O WebBrowser Control usará qualquer versão do IE que você tenha instalado, mas, por motivos de compatibilidade, ele renderizará páginas no modo de padrões IE7 por padrão.

Se você quiser aproveitar os novos recursos do IE9, você deve adicionar a meta tag <meta http-equiv="X-UA-Compatible" content="IE=9" > dentro de <head> Tag da sua página HTML.

Esta meta tag deve ser adicionada antes de qualquer link para CSS, arquivos JavaScript etc. que também estão em seu <head> funcionar corretamente (apenas outro <meta> tags ou o <title> A tag pode vir antes dela).

Uma alternativa é adicionar uma entrada no registro a:

HKLM> Software> Microsoft> Internet Explorer> Principal> FeatureControl> Caracter_browser_emulation

E lá adicione 'myApplicationName.exe' com valor '9000' para forçar o controle WebBrowser a exibir páginas no modo IE9. Embora existam Outros valores que você pode usar também Além disso, observe que esses documentos não são totalmente precisos, pois não parece possível obter uma página para renderizar no modo IE 8, qualquer que você use.

Adicionar a chave do registro ao mesmo caminho no HKCU em vez do HKLM também funcionará - isso é útil, pois a gravação para o HKLM requer privilégios de administrador onde o HKCU não.

Graças a Deus, encontrei isso. O seguinte é extremamente importante:

<meta http-equiv="X-UA-Compatible" content="IE=9" >

Sem isso, nenhum dos relatórios que eu estava gerando funcionaria na instalação do IE9, apesar de ter funcionado muito bem no IE8. Eles apareceriam corretamente em um controle do navegador da web, mas haveria cartas ausentes, aumentava o espaço branco, etc., quando eu liguei para .print (). Eles eram apenas HTML básicos que deveriam ser capazes de serem renderizados mesmo em mosaico. Heh não sei por que o modo de compatibilidade do IE7 estava indo de conta. Notavelmente, você pode .Print () na mesma página 5 vezes e está faltando letras diferentes a cada vez. Ele até transportaria para a saída PDF, então é definitivamente o navegador.

Uma nota de cerca de 64 bits que parecem tropeçar em algumas pessoas. Se o seu aplicativo estiver em execução no Windows de 64 bits, você provavelmente precisará definir o DWORD em [HKLM Software Wow6432Node Microsoft Internet Explorer Main FeatureControl Caracter_browser_emulation].

Só para ser completo ...

Para o sistema operacional de 32 bits, você deve adicionar uma entrada de registro a:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

*******OU*******

Para o sistema operacional de 64 bits, você deve adicionar uma entrada de registro a:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

Esta entrada deve ser um DWORD, com o nome sendo o nome do seu executável, que hospeda o controle WebBrowser; ou seja:

myAppName.exe (não use "contoso.exe" como na página da web do msdn ... é apenas um nome de espaço reservado)

Então dê um DWORD valor, de acordo com a tabela em:

http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browsher_emulation

Eu mudei para 11001 decimal ou 0x2af9 hexadecimal --- (ou seja, 11 emulação), já que esse não é o valor padrão (se você tiver o IE 11 instalado-ou qualquer outra versão).

Esse artigo do MSDN contém notas sobre várias outras alterações no registro que afetam o comportamento do navegador da Internet Explorer.

Eu sei que este tópico é antigo e já existem respostas abrangentes.

Apenas caso você não saiba disso:

<meta http-equiv="X-UA-Compatible" content="IE=edge" >

Você não precisa ser o número da versão do código hardcode como

<meta http-equiv="X-UA-Compatible" content="IE=9" >

Eu concordo totalmente com a solução fornecida, mas acho que um pouco de esclarecimento é importante, eu acho, pode ser necessário.

Para cada processo (leia também: vshost.exe, yourwinformApplication.exe.svchost, ou o nome do seu aplicativo.exe) que precisará adicionar um DWORD com o valor fornecido, no meu caso, deixo 9000 (em decimal) em aplicação Nome e execução de script sem problemas e sem erros.

O erro mais comum é acreditar que é necessário adicionar "contoso.exe" como está e pensar que tudo funciona!

Sim, o WebBrowser Control usa qualquer versão do IE que você tenha instalado. Isso significa, é claro, que, se você executar seu aplicativo em uma máquina com o IE 8, os recursos do IE 9 de que você depende não estarão disponíveis.

Eu vim para esta solução e não funcionou para mim! Porque eu estava usando 64 bits, tive que substituir o registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

Em vez daquele que todo mundo fala:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]

Gostei do código (C#) no seguinte, que define as configurações do registro para o seu aplicativo. Não tenho certeza se ele o cortará após a instalação, se forem necessárias permissões. Para mim, resolveu um problema com o WebSocket não estar disponível dentro de um controle WebBrowser no WPF.

C Chamada Ajax

Eu tive o mesmo problema, e as respostas do registro aqui não funcionaram.

Eu tinha um controle do navegador na nova versão do meu programa que funcionou bem no XP, falhou no Windows 7 (64 bits). A versão antiga funcionou no XP e no Windows 7.

A página da web exibida no navegador usa um plug -in estranho para mostrar mapas SVG antigos (acho que é um applet java).

Acontece que o problema está relacionado à proteção DeP no Windows 7.

As versões antigas do DOTNET 2 não definiram o sinalizador exigido de DEP no exe, mas do DOTNET 2, SP 1 em diante (sim, o comportamento de compilação e, portanto, o comportamento do tempo de execução do EXE mudou dependendo da máquina em que você compilou, agradável. ..).

Está documentado em um blog MSDN Nxcompat e o compilador C#. Citar : Sem dúvida, isso surpreenderá alguns desenvolvedores ... Faça o download de um pacote de serviço da estrutura, recompile, execute seu aplicativo e agora você está obtendo exceções ip_on_heap.

Adicionando o seguinte ao post Build no Visual Studio, desative a DEP para o EXE e tudo funciona conforme o esperado:

all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"

Em relação à resposta aceita de Whitehawk. Estou apenas tentando adicionar um pouco de experiência prática. Estava apenas tentando adicionar comentários, mas reclama que é muito longo.

Basicamente, sem o IE 9 instalado, o switch do registro Feature_browser_emulation não funcionará.

Por exemplo, minha própria experiência hoje eu estava tentando fazer com que o .NET WebControl trabalhe com o modo IE10 porque um html que estou tentando renderizar não funcionará com .NetControl sob o VS2012, e nem mesmo funcionará quando carrego o HTML para o IE8 Diretamente, o CSS ainda não renderiza corretamente (mesmo depois que eu digo que permita o conteúdo bloqueado). Mas eu testei o mesmo HTML OK com o IE10 na máquina Win 8 de um amigo. É por isso que estou tentando definir o .NET WebControl para o modo IE 10, mas continua falhando ...

Agora, achei que este é o BCOS My Win 7 Machine apenas o IE8 instalou, então, independentemente de qual valor eu defini para o comutador de raciocínio_browser_emulation (valor para IE9, ie10 IE11), ele simplesmente não funcionará!

Então eu baixei e instalei o IE 10 na minha máquina Win 7. Ainda não funcionará, então adicionei o recurso_browser_emulation, ele começou a funcionar!

Também notei independentemente de qual valor eu defina, até mesmo defina como valor 0 por padrão, o WebControl ainda está usando o modo IE 10, que ainda funciona para mim.

Então, para resumir, se você instalou o IE X, mas deseja que seu .NET WebControl trabalhe no IE (x+n) n> 0 modo, Duas coisas você precisa fazer:

  1. Vá para o site MS e faça o download e instale o IE (x+n) em sua máquina, você precisará reiniciar após a instalação.

  2. Aplique a resposta de Whitehawk.

Basicamente: para controlar o valor desse recurso usando o registro, adicione o nome do seu arquivo executável à seguinte configuração e defina o valor para corresponder à configuração desejada.

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Internet Explorer
            Main
               FeatureControl
                  FEATURE_BROWSER_EMULATION
                     contoso.exe = (DWORD) 00009000

Windows Internet Explorer 8 e mais tarde. O recurso de característica_browser_emulation define o modo de emulação padrão para o Internet Explorer e suporta os seguintes valores.

Descrição do valor

  • 11001 (0x2AF9 Internet Explorer 11. As páginas da Web são exibidas no modo IE11 Edge, independentemente da diretiva Doctype.

    11000 (0x2AF8) IE11. As páginas da Web que contêm as diretrizes Doctype baseadas em padrões são exibidas no modo IE11 Edge. Valor padrão para o IE11.

    10001 (0x2711) Internet Explorer 10. As páginas da Web são exibidas no modo de padrões IE10, independentemente da diretiva Doctype.

    10000 (0x02710) Internet Explorer 10. Páginas da Web contendo padrões! Valor padrão para o Internet Explorer 10.

    9999 (0x270f) Windows Internet Explorer 9. As páginas da Web são exibidas no modo de padrões IE9, independentemente da diretiva Doctype.

    9000 (0x2328) Internet Explorer 9. Páginas da Web contendo padrões! Valor padrão para o Internet Explorer 9.

    Importante no Internet Explorer 10, as páginas da Web que contêm padrões!

    As páginas da web 8888 (0x22b8) são exibidas no modo de padrões IE8, independentemente da diretiva Doctype.

    8000 (0x1F40) Páginas da Web que contêm as diretrizes doctype baseadas em padrões são exibidas no modo IE8. Valor padrão para o Internet Explorer 8 Importante no Internet Explorer 10, as páginas da Web que contêm padrões!

    7000 (0x1b58) Páginas da Web que contêm padrões! Valor padrão para aplicativos que hospedam o controle WebBrowser.

Ref aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top