Existe alguma maneira relativamente fácil de inserir um navegador moderno em um aplicativo .NET?
Pelo que entendi, o WebBrowser
controle é um invólucro para o IE , o que não seria um problema, exceto pelo fato de parecer uma versão muito antiga do IE , com tudo o que isso implica em termos de erros de CSS, riscos potenciais à segurança (se o mecanismo de renderização não tiver sido corrigido, posso realmente esperar que os zilhões de problemas de estouro de buffer sejam corrigidos?) e outros problemas.
Estou usando o Visual Studio C # (edição expressa - isso faz alguma diferença aqui?)
Gostaria de integrar um bom navegador da web em meus aplicativos. Em alguns, eu apenas o uso para lidar com o processo de registro do usuário, interface com alguns dos recursos do meu site e outras coisas dessa ordem, mas tenho outro aplicativo em mente que exigirá mais controle ...
Eu preciso:
- Um navegador que pode integrar-se dentro de uma janela do meu aplicativo (não uma janela separada)
- Um bom suporte para CSS, js e outras tecnologias da Web, a par de qualquer navegador moderno
- Funções básicas do navegador como "navegar", "voltar", "recarregar" ...
- Acesso liberal ao código da página e saída.
Eu estava pensando no Chrome, já que ele vem sob a licença BSD, mas ficaria feliz com uma versão recente do IE.
Tanto quanto possível, gostaria de manter as coisas simples. O melhor seria se alguém pudesse corrigir o WebBrowser
controle existente , que já representa cerca de 70% do que eu preciso, mas não acho que isso seja possível.
Eu encontrei um controle activeX para o Mozilla ( http://www.iol.ie/~locka/mozilla/control.htm ), mas parece que é uma versão antiga, portanto não é necessariamente uma melhoria.
Estou aberto a sugestões
fonte
WebBrowser
controle hospedado usa emulação IE7, a menos que instruído de outra formaFEATURE_BROWSER_EMULATION
. Isto está documentado aqui: blogs.msdn.com/b/askie/archive/2009/03/23/…Respostas:
Caixa CefSharp .Net ligações, um projeto que começou há um tempo atrás que, felizmente, foi pego pela comunidade e transformado em algo maravilhoso.
O projeto envolve o Chromium Embedded Framework e foi usado em vários projetos importantes, incluindo o cliente Windows da Rdio, o Facebook Messenger para Windows e o Github para Windows.
Possui controles de navegador para WPF e Winforms e possui vários recursos e pontos de extensão. Sendo baseado no Chromium, é incrivelmente rápido também.
Pegue no NuGet:
Install-Package CefSharp.Wpf
ouInstall-Package CefSharp.WinForms
Confira exemplos e dê seus pensamentos / feedback / solicitações de recebimento: https://github.com/cefsharp/CefSharp
Licenciado BSD
fonte
O Chrome usa (um garfo do) Webkit, se você não sabia, que também é usado pelo Safari. Aqui estão algumas perguntas da mesma linha:
O webkit não é ótimo como a outra resposta afirma, uma versão não funciona mais (a do Google Code) e a Mono é experimental. Seria bom se alguém fizesse um esforço para criar um invólucro .NET decente para ele, mas não é algo que alguém queira fazer - o que é surpreendente, já que agora ele suporta HTML5 e muitos outros recursos que o IE (8). ) falta de motor.
Atualização (2014)
Há um novo projeto de licença dupla que permite incorporar o Chrome nos aplicativos .NET chamados Awesomium . Ele é fornecido com uma API .NET, mas requer alguns hacks para renderização (os exemplos atraem a janela do navegador para um buffer, pintam o buffer como uma imagem e são atualizados em um timer).
Acho que esse é o navegador usado pelo Origin no Battlefield 3.
Atualização (2016)
Agora existe o DotnetBrowser , uma alternativa comercial ao Awesomium. É baseado no Chromium.
fonte
Estou testando alternativas para o componente de navegador da Web C # há alguns dias e aqui está minha lista:
1. Usando as versões mais recentes do IE 8,9:
O componente Navegador da Web não é o IE7, mas o IE8? Como mudar isso?
Prós:
Contras:
Isso não requer muito trabalho e você pode obter suporte para HTML5 e CSS3, embora o IE9 não possua alguns dos melhores recursos de CSS3 e HTML5. Mas tenho certeza de que você poderia fazer o IE10 funcionar da mesma maneira. O problema seria que o sistema de destino teria que ter o IE10 instalado e, como ainda está em pré-visualização no Windows 7, sugiro que não.
2. OpenWebKitSharp
O OpenWebKitSharp é um wrapper .net para o mecanismo do webkit baseado no projeto WebKit.NET 0.5. O WebKit é um mecanismo de layout usado pelo Chrome / Safari
Prós:
Contras:
O OpenWebKit é bastante bom, embora muitos recursos ainda não tenham sido implementados, tive alguns problemas ao usá-lo com o visual studio, que lança referência de objeto nulo aqui e, em seguida, no modo de design, existem alguns problemas de JS. Qualquer pessoa que o utilize quase imediatamente notará que o js alert não faz nada. Eventos como mouseup, mousedown ... etc. não funcionam, js arrastar e soltar é de buggy e assim por diante ..
Eu também tive algumas dificuldades em instalá-lo, pois ele requer uma versão específica do VC redistribuível instalada; portanto, após a exceção, observei o log de eventos, encontrei a versão do VC e a instalei.
3. GeckoFX
Prós:
Contras:
GeckoFX é um controle Webrowser multiplataforma para incorporação em aplicativos WinForms. Isso pode ser usado com o .NET no Windows e com o mono no Linux. Gecko é um mecanismo de layout usado pelo Firefox.
Encontrei poucas informações de que o GeckoFX não é desenvolvido ativamente, o que não é verdade, é claro que sempre há uma ou duas versões do Firefox, mas isso é normal, fiquei realmente impressionado com a atividade e o próprio controle. Ele faz tudo o que eu precisava, mas precisei de algum tempo para executá-lo. Aqui está um pequeno tutorial para executá-lo:
Se você realmente precisa usar o Chrome, dê uma olhada neste produto chamado Awesomium , ele é gratuito para projetos não comerciais, mas a licença custa alguns milhares de dólares para fins comerciais.
fonte
Eu tive o mesmo problema, o WebBrowser estava usando uma versão antiga do IE, com algumas pesquisas, encontrei o código a seguir que faz uma alteração no registro e faz o WebBrowser usar a versão mais recente possível do IE:
Você só precisa criar uma classe e inserir esse código e, em seguida, execute o seguinte código quando o programa iniciar:
VB.NET:
Você pode usá-lo como:
fonte
Você pode usar o registro para definir a versão do IE para o controle do navegador da web. Vá para: HKLM \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION e adicione "yourApplicationName.exe" com o valor de browser_emulation Para ver o valor da browser_emulation, consulte o link: http://msdn.microsoft.com/en-us /library/ee330730%28VS.85%29.aspx#browser_emulation
fonte
Ter olhar para o Mono.WebBrowser controle - ele incorpora tanto Gecko (como o usado pelo Firefox) ou WebKit (como o usado pelo Safari) em WinForms (sem o uso de ActiveX).
fonte
Sei que este não é um controle WebBrowser 'substituto', mas estava tendo alguns problemas de renderização horríveis enquanto mostrava uma página que estava usando o BootStrap 3+ para layout, etc. Aparentemente, é específico para o IE e diz para ele usar a variação mais recente encontrada na máquina cliente para renderização (para que não use o IE7 como eu acredito que seja o padrão)
Então, basta colocar:
em algum lugar na parte principal do seu documento.
Se é claro que não é o seu documento, isso obviamente não ajudará (embora eu pessoalmente considere isso uma brecha de segurança se você estiver lendo páginas não criadas por você mesmo através do controle do navegador da web - por que não usar apenas um navegador da web!)
Boa sorte.
fonte
<head>
, coloque-o como o primeiro filho de<head>
. Demorou um pouco para descobrir isso.<meta>
primeiro filho<head>
, ele será executado no modo de compatibilidade, não no modo de borda.Dê uma olhada na biblioteca DotNetBrowser . Ele fornece controles de navegador WPF e WinForms baseados em Chromium, fáceis de incorporar ao aplicativo .NET. Ele suporta todos os padrões modernos da web, incluindo HTML5, CSS3 e JavaScript. A página renderizada é exatamente igual ao Google Chrome.
A biblioteca herda a arquitetura de processos múltiplos do Chromium - cada página da web é renderizada em um processo separado do Chromium, e o aplicativo continua funcionando mesmo após a falha do plug-in ou qualquer outro erro inesperado na página da web.
Aqui estão alguns outros recursos úteis, fornecidos pelo DotNetBrowser: é possível ouvir eventos de carregamento, gerenciar atividades de rede, configurar proxy, simular ações do usuário, trabalhar com cookies, acessar e modificar DOM, ouvir eventos DOM, ouvir eventos DOM, chamar JavaScript do .NET e vice-versa, use câmera e microfone na página da Web, configure a comunicação baseada no WebRTC e muito mais .
Confira a Referência da API para obter mais detalhes.
O trecho de código abaixo demonstra como criar um BrowserView, incorporá-lo em um formulário e carregar um URL:
Depois de executar o exemplo acima, você obterá a seguinte saída:
A biblioteca é comercial. As licenças comerciais incluem pacotes de suporte para diferentes tamanhos de equipe. Também é possível comprar o código fonte da biblioteca.
Além de sua própria página do componente está disponível como pacote NuGet e como pacote VSIX no Visual Studio de mercado.
fonte
Eu tentei várias variantes do Webkit, mas na minha experiência nada supera os avanços que o OpenWebkitSharp possui. Adore, adore .. As pontuações HTML5 e CSS3 são as mais próximas possíveis do Google Chrome. API e modelo de eventos muito bons. Se você encontrar APIs "não implementadas", provavelmente porque elas não foram implementadas no Webkit. Tudo o resto funciona muito bem.
fonte
ATUALIZAÇÃO 2018 DE MAIO
Se você está direcionando o aplicativo para execução no Windows 10, agora pode incorporar o navegador Edge no aplicativo .net usando o Windows Community Toolkit .
Exemplo WPF:
1) Instale o pacote Nuget do Windows Community Toolkit
2) Código XAML
3) Código CS:
Exemplo de WinForms:
Por favor, consulte este link para mais informações.
fonte
Experimente o EO.WebBrowser . É novo e baseia-se na versão mais recente do navegador Chrome. A melhor parte disso é que ele compacta tudo dentro de uma única DLL do .NET, além de ser muito fácil de usar e implantar, mas também a mesma DLL suporta 32 bits e 64 bits porque é uma DLL do .NET.
fonte
Eu usei o GeckoFX e isso me serve muito bem. Ele usa o mecanismo do Firefox. A única ressalva em que eu já me deparei com isso é que ele emite o evento "DocumentLoaded" uma vez antes de o documento estar totalmente carregado ... Acho que dispara um quando o HTML é carregado e outro quando todo o imagens e outras coisas são carregadas. Corrigi-o simplesmente ignorando o primeiro, e funcionou lindamente sem falhas até agora.
Você pode encontrá-lo aqui: https://bitbucket.org/geckofx/
Como a maioria das bibliotecas decentes, é de código aberto.
fonte
MozNet é um controle .NET, anteriormente baseado no controle GeckoFX mais ou menos abandonado, mas está em pleno desenvolvimento e tem muito mais recursos do que o GeckoFX pode suportar. Você pode encontrá-lo no site da Se7en Soft .
fonte
O EO.BrowserControl é rápido e fácil. Possui mecanismo de navegador Chrome e funciona com qualquer versão do .NET
https://visualstudiogallery.msdn.microsoft.com/fcee0646-42e7-484f-b22e-f8b2ace55dd7
Nota: Este é um produto licenciado comercialmente e não o estou promovendo com isso em mente. Depois de experimentar várias outras coisas, acabei escolhendo isso.
fonte
Atualização 2016:
Existem 3 opções adicionais que posso sugerir:
1. BrowseEmAll.Cef
Um componente .Net que pode ser usado para integrar o mecanismo Chrome ao seu aplicativo .Net. Baseado no CefGlue, mas um pouco mais rápido nas atualizações da versão mais recente do Chrome. Também há uma opção de suporte comercial disponível, que pode ser útil para alguns. Claro que o componente em si é de código aberto .
2. BrowseEmAll.Gecko
Outro componente .Net que pode ser usado para integrar o mecanismo do Firefox ao seu aplicativo .Net. Isso é baseado no Geckofx, mas diferente da versão atual do Geckofx, ele funcionará com uma versão normal do Firefox. Para usar o Geckofx, você precisará criar o Firefox. Novamente, o suporte comercial está disponível, mas o componente em si é totalmente de código aberto .
3. API BrowseEmAll Core
Precisa de todos os navegadores diferentes no seu aplicativo .Net? Com a API BrowseEmAll Core, você pode integrar o Chrome, Firefox, Webkit e Internet Explorer ao seu aplicativo. Este é um produto comercial, portanto, esteja avisado.
(Divulgação completa: trabalho para esta empresa, então leve tudo o que digo com um grão de sal)
fonte
Webview2 - baseado em cromo (visualização) agora está disponível para winform e wpf
Confira: https://docs.microsoft.com/en-us/microsoft-edge/webview2/
fonte
Se você está procurando um bom controle baseado no IE - confira: http://code.google.com/p/csexwb2/
Eu usei em produtos de produção. É muito bom e tem boas demos, embora não pareça estar sendo mantido tão bem agora como costumava ser.
fonte
O Geckofx e o Webkit.net foram promissores no início, mas não se mantiveram atualizados com o Firefox e o Chrome, respectivamente, enquanto o Internet Explorer melhorava, assim como o controle do navegador da Web, embora ele se comporte como o IE7 por padrão, independentemente da versão do IE que você mas isso pode ser corrigido entrando no registro e altere-o para IE9, permitindo o HTML5.
fonte
Confira o controle GeckoFX .
fonte
Eu tentei todos os navegadores que estão lá fora. Infelizmente, o único que realmente funcionou para mim em todas as circunstâncias foi o EO.Browser. Eu gostaria de ter escolhido uma solução gratuita, mas acabei com o EO.Browser. É muito caro, mas bem conservado.
fonte
Atualização 2016:
Para mim, a única alternativa confiável e mantida de navegador para o IE é o EO.WebBrowser. Passei dias e semanas experimentando os outros. Todos eles tiveram alguns problemas que interromperam o show para mim em algum momento.
fonte
Vale a pena dar uma olhada em um produto comercial como o WebKitX aqui: https://www.webkitx.com
Ele usa o Chromium Embedded Framework e renderiza HTML5, WebGL, PDF e Flash no Windows XP, 7, 8, 10. Também fornece sabores de controle de 32 e 64 bits.
Oferece acesso DOM usando objetos COM semelhantes ao controle IE WebBrowser:
Você pode chamar JavaScript pelo nome da função, passando argumentos escalares (sem usar eval) e também possui retornos de chamada JavaScript para Angular :
Você pode adicionar seus próprios objetos COM interoperáveis ao JavaScript:
Ele suporta WebGL / WebAudio para jogos HTML5, que você pode desativar para ambientes Citrix:
fonte