Alguém aqui tem experiência com / no desenvolvimento de extensões do IE que podem compartilhar seus conhecimentos? Isso incluiria exemplos de código, links para bons, documentação do processo ou qualquer outra coisa.
Eu realmente quero fazer isso, mas estou atingindo uma parede gigante com documentação ruim, código ruim / código de exemplo / falta dela. Qualquer ajuda / recursos que você possa oferecer seria muito apreciada.
Especificamente, eu gostaria de começar com como obter / manipular o DOM de dentro de uma extensão do IE.
EDIT, ainda mais detalhes:
Idealmente, gostaria de plantar um botão da barra de ferramentas que, quando clicado, exibia um menu que contém links para sites externos. Também gostaria de acessar o DOM e plantar JavaScript na página, dependendo de algumas condições.
Qual é a melhor maneira de manter as informações em uma extensão do IE? No Firefox / Chrome / A maioria dos navegadores modernos, você usa window.localStorage
, mas obviamente com o IE8 / IE7, essa não é uma opção. Talvez um banco de dados SQLite ou algo assim? Não há problema em supor que o .NET 4.0 será instalado no computador de um usuário?
Não quero usar o Spice IE, pois quero criar um que seja compatível com o IE9. Também adicionei a tag C ++ a essa pergunta, porque se for melhor criar uma em C ++, eu posso fazer isso.
Respostas:
[UPDATE] Estou atualizando esta resposta para funcionar com o Internet Explorer 11 , na comunidade Windows 10 x64 com Visual Studio 2017 . A versão anterior desta resposta (para Internet Explorer 8, no Windows 7 x64 e no Visual Studio 2010) está na parte inferior desta resposta.
Criando um complemento funcional do Internet Explorer 11
Estou usando a Comunidade do Visual Studio 2017 , C # , .Net Framework 4.6.1 , portanto, algumas dessas etapas podem ser um pouco diferentes para você.
Você precisa abrir o Visual Studio como administrador para criar a solução, para que o script pós-compilação possa registrar o BHO (precisa de acesso ao registro).
Comece criando uma biblioteca de classes. Liguei para o meu InternetExplorerExtension .
Adicione estas referências ao projeto:
"Microsoft Internet Controls"
"Microsoft.mshtml"
Nota: De alguma forma, o MSHTML não estava registrado no meu sistema, mesmo que eu pudesse encontrá-lo na janela Adicionar referência. Isso causou um erro ao criar:
A correção pode ser encontrada em http://techninotes.blogspot.com/2016/08/fixing-cannot-find-wrapper-assembly-for.html Ou você pode executar este script em lote:
Crie os seguintes arquivos:
IEAddon.cs
Interop.cs
e finalmente um formulário que usaremos para configurar as opções. Nesse formulário, coloque um
TextBox
e um OkButton
. Defina o DialogResult do botão como OK . Coloque este código no código do formulário:Nas propriedades do projeto, faça o seguinte:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
http://msdn.microsoft.com/en-us/library/ms976373.aspx#bho_getintouch
Na guia Build Events, defina a linha de comando Post-build events para:
Atenção: mesmo que meu computador seja x64, usei o caminho do não-x64
gacutil.exe
e funcionou ... o específico para x64 é:IE de 64 bits Precisa de BHO compilado e registrado em 64 bits. Embora eu só pudesse depurar usando o IE11 de 32 bits, a extensão registrada de 32 bits também funcionava executando o IE11 de 64 bits.
Esta resposta parece ter algumas informações adicionais sobre isso: https://stackoverflow.com/a/23004613/195417
Se necessário, você pode usar o regime de 64 bits:
Como este complemento funciona
Não mudei o comportamento do complemento ... dê uma olhada na seção IE8 abaixo para obter uma descrição.
## Resposta anterior para o IE8
Cara ... isso tem sido muito trabalho! Eu estava tão curioso sobre como fazer isso, que eu mesmo fiz.
Primeiro de tudo ... crédito não é todo meu. Esta é uma compilação do que encontrei nesses sites:
E, é claro, eu queria que minha resposta tivesse os recursos que você perguntou:
Descreverei passo a passo como consegui trabalhar com o Internet Explorer 8 , no Windows 7 x64 ... observe que não pude testar em outras configurações. Espero que você entenda =)
Criando um complemento funcional do Internet Explorer 8
Estou usando o Visual Studio 2010 , C # 4 , .Net Framework 4 , portanto, algumas dessas etapas podem ser um pouco diferentes para você.
Criou uma biblioteca de classes. Liguei para o meu InternetExplorerExtension .
Adicione estas referências ao projeto:
Nota: Essas referências podem estar em locais diferentes em cada computador.
é isso que minha seção de referências no csproj contém:
Crie os arquivos da mesma maneira que os arquivos IE11 atualizados.
IEAddon.cs
Você pode descomentar as seguintes linhas da versão IE11:
Interop.cs
O mesmo que a versão IE11.
e finalmente um formulário que usaremos para configurar as opções. Nesse formulário, coloque um
TextBox
e um OkButton
. Defina o DialogResult do botão como OK . O código é o mesmo para o complemento IE11.Nas propriedades do projeto, faça o seguinte:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
http://msdn.microsoft.com/en-us/library/ms976373.aspx#bho_getintouch
Na guia Eventos de Construção, defina a linha de comando Eventos Pós-Construção para:
Atenção: como meu computador é x64, há um x64 específico no caminho do executável gacutil na minha máquina que pode ser diferente do seu.
IE de 64 bits Precisa de BHO compilado e registrado em 64 bits. Use o RegAsm.exe de 64 bits (geralmente reside em C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe)
Como este complemento funciona
Ele percorre toda a árvore DOM, substituindo o texto, configurado usando o botão, por si só com um fundo amarelo. Se você clicar nos textos amarelados, ele chamará uma função javascript que foi inserida na página dinamicamente. A palavra padrão é 'browser', para que corresponda a muitos deles! EDIT: depois de alterar a string a ser destacada, você deve clicar na caixa URL e pressionar Enter ... F5 não funcionará, acho que é porque F5 é considerado como 'navegação' e seria necessário ouvir para navegar no evento (talvez). Vou tentar consertar isso mais tarde.
Agora é hora de partir. Estou muito cansado. Sinta-se à vontade para fazer perguntas ... talvez seja, não poderei responder, pois vou viajar ... daqui a três dias volto, mas tentarei entrar aqui enquanto isso.
fonte
$(TargetDir)$(TargetFileName)
usar"$(TargetDir)$(TargetFileName)"
2. Se você usa o Visual Studio 2010 Express, provavelmente (eu) não vê a opção Iniciar programa externo na guia Debug - I basta executar IE e navegue para o URL fornecido 3. não parece trabalhar no IE9 - Eu posso abrir o formulário (opções Marcador), mas eu não sei como fazê-lo destacar o textoOutra abordagem interessante seria verificar:
http://www.crossrider.org
É uma estrutura baseada em JS com jquery que permite desenvolver extensões de navegador para IE, FF e Chrome usando um único código JS comum. Basicamente, a estrutura faz todo o trabalho desagradável e você fica escrevendo o código de seus aplicativos.
fonte
O estado das extensões do IE é realmente muito triste. Você tem o modelo antigo do IE5 Browser Helper Object (sim, aqueles BHOs famosos que todo mundo gostava de bloquear no passado), barras de ferramentas e os novos aceleradores do IE. Mesmo assim, a compatibilidade será interrompida às vezes. Eu costumava manter uma extensão para o IE6 que rompeu com o IE7, então há algumas coisas que mudaram. Na maior parte do tempo, até onde eu sei (não conheço as BHOs há anos), você ainda precisa codificá-las usando as Active Template Libraries (como uma STL para COM da Microsoft) e, portanto, é apenas para C ++. Você pode fazer a interoperabilidade COM com C # e fazê-lo em c #, mas provavelmente será muito difícil para o que vale a pena. De qualquer forma,
http://msdn.microsoft.com/en-us/library/aa753587(v=vs.85).aspx
E para os aceleradores que são novos no IE8, você pode verificar este.
http://msdn.microsoft.com/en-us/library/cc289775(v=vs.85).aspx
Concordo que a documentação é terrível e as APIs estão desatualizadas. Ainda espero que isso ajude.
Edição: Eu acho que posso jogar uma última fonte de informação aqui. Eu estava olhando minhas anotações quando estava trabalhando em BHOs. E este é o artigo que me iniciou com eles. É meio antigo, mas tem uma boa explicação das interfaces ATL que você usará ao trabalhar com o IE BHOs (IObjectWithSite, por exemplo). Eu acho que está bem explicado e me ajudou muito naquela época. http://msdn.microsoft.com/en-us/library/bb250436.aspx Também verifiquei o exemplo que o GregC postou. Ele funciona com pelo menos o IE8 e é compatível com o VS 2010, portanto, se você quiser fazer C #, pode começar por lá e dar uma olhada no Livro de Jon Skeet. (C # na profundidade 2ª edição) O capítulo 13 contém muitas informações sobre os novos recursos do C # 4 que você pode usar para tornar a interação com o COM mais agradável. (Eu ainda recomendo que você faça seu suplemento em C ++)
fonte
Desenvolver C # BHOs é um pé no saco. Envolve muitos códigos COM nojentos e chamadas p / invocação.
Eu tenho um C # BHO finalizado aqui , no qual você é livre para usar a fonte para o que quiser. Digo "principalmente" , porque nunca descobri como salvar os dados do aplicativo no Modo Protegido do IE .
fonte
Trabalho com o controle de navegadores da web do IE há anos e, ao longo deles, um nome aparece várias vezes com publicações úteis: Igor Tandetnik
Se eu estivesse desenvolvendo uma extensão, segmentaria uma BHO e começaria a pesquisar no Google:
BHO Igor Tandetnik
OU
Objeto auxiliar do navegador Igor Tandetnik
Suas postagens geralmente são muito detalhadas e ele sabe do que está falando.
Você vai se sentir bem em programação COM e ATL. Para obter um exemplo passo a passo, confira: http://msdn.microsoft.com/en-us/library/ms976373.aspx
fonte
Concordo com Robert Harvey, C # 4.0 apresenta interoperabilidade COM aprimorada. Aqui está um pouco do código C # mais antigo, que precisa desesperadamente de uma reescrita.
http://www.codeproject.com/KB/cs/Attach_BHO_with_C_.aspx
Esta é uma tentativa de simplificar as coisas, evitando o ATL e seguindo o Spartan COM:
C ++ e COM para fazer as BHOs
fonte
Se você não está tentando reinventar a roda, tente o Add In Express for IE . Eu usei o produto para o material VSTO , e é muito bom. Eles também têm um fórum útil e suporte rápido.
fonte
Está obviamente resolvido, mas para os outros usuários, eu recomendaria o framework SpicIE . Eu fiz minha própria extensão com base nela. Ele suporta apenas o Internet Explorer 7/8 oficialmente, mas testei isso no Internet Explorer 6-10 (do Windows XP ao Windows 8 Consumer Preview) e funciona bem . Infelizmente, houve alguns bugs na versão mais recente, então tive que corrigi-los e fiz minha própria versão: http://archive.msdn.microsoft.com/SpicIE/Thread/View.aspx?ThreadId=5251
fonte
Eu sugiro calorosamente este post de Pavel Zolnikov publicado em 2002!
http://www.codeproject.com/Articles/2219/Extending-Explorer-with-Band-Objects-using-NET-and
Ele é baseado no uso de objetos Band e é compilado usando o .Net 2.0. O código-fonte é fornecido, abre e compila bem com o Visual Studio 2013. Como você lerá nos comentários da postagem, ele funciona perfeitamente para o IE 11, Windows 7 e Windows 10. Ele funcionou perfeitamente para mim no Windows 7 + SP1 e IE 11 Aproveite!
fonte
A pergunta é de 2013, agora é 2020, mas pode ser útil para futuros visitantes.
Tentei implementar a resposta de @Miguel Angelo, que não funcionou no começo.
Ainda existem algumas configurações que você pode definir.
no Internet Explorer (eu estou usando o IE-11), vá para
Tools-->Internet Options-->Advanced
:Veja também esta questão SO e este exemplo no github
fonte
fonte