Czy ktoś tutaj ma doświadczenie w opracowywaniu rozszerzeń IE, które mogą dzielić się swoją wiedzą? Obejmuje to próbki kodu, łącza do dobrych, dokumentację procesu lub cokolwiek innego.
Naprawdę chcę to zrobić, ale uderzam w gigantyczną ścianę z kiepską dokumentacją, kiepskim kodem / przykładowym kodem / jego brakiem. Każda pomoc / zasoby, które możesz zaoferować, byłyby bardzo mile widziane.
W szczególności chciałbym zacząć od sposobu uzyskania dostępu do DOM i manipulowania nim z poziomu rozszerzenia IE.
EDYCJA, jeszcze więcej szczegółów:
Idealnie chciałbym umieścić przycisk paska narzędzi, który po kliknięciu wyświetli menu zawierające linki do stron zewnętrznych. Chciałbym również uzyskać dostęp do DOM i umieścić JavaScript na stronie w zależności od niektórych warunków.
Jaki jest najlepszy sposób na zachowanie informacji w rozszerzeniu IE? W Firefox / Chrome / Większość nowoczesnych przeglądarek używaszwindow.localStorage
, ale oczywiście w IE8 / IE7, to nie jest opcja. Może SQLite DB lub coś takiego? Czy można założyć, że .NET 4.0 zostanie zainstalowany na komputerze użytkownika?
Nie chcę używać Spice IE, ponieważ chcę zbudować taki, który jest również zgodny z IE9. Dodałem również tag C ++ do tego pytania, ponieważ jeśli lepiej jest zbudować jeden w C ++, mogę to zrobić.
Odpowiedzi:
[AKTUALIZACJA] Aktualizuję tę odpowiedź do pracy z programem Internet Explorer 11 w systemie Windows 10 x64 ze społecznością Visual Studio 2017 . Poprzednia wersja tej odpowiedzi (dla Internet Explorera 8, Windows 7 x64 i Visual Studio 2010) znajduje się na dole tej odpowiedzi.
Tworzenie działającego dodatku do programu Internet Explorer 11
Korzystam z Visual Studio 2017 Community , C # , .Net Framework 4.6.1 , więc niektóre z tych kroków mogą być nieco inne dla Ciebie.
Musisz otworzyć Visual Studio jako Administrator, aby zbudować rozwiązanie, aby skrypt po kompilacji mógł zarejestrować BHO (wymaga dostępu do rejestru).
Zacznij od utworzenia biblioteki klas. Zadzwoniłem do mojego InternetExplorerExtension .
Dodaj te odniesienia do projektu:
"Microsoft Internet Controls"
"Microsoft.mshtml"
Uwaga: Jakoś MSHTML nie został zarejestrowany w moim systemie, chociaż mogłem znaleźć w oknie Dodaj odniesienie. Spowodowało to błąd podczas budowania:
Poprawka można znaleźć na stronie http://techninotes.blogspot.com/2016/08/fixing-cannot-find-wrapper-assembly-for.html Lub możesz uruchomić ten skrypt wsadowy:
Utwórz następujące pliki:
IEAddon.cs
Interop.cs
i wreszcie formularz, którego użyjemy do skonfigurowania opcji. W tej formie umieść a
TextBox
i OKButton
. Ustaw DialogResult przycisku na Ok . Umieść ten kod w kodzie formularza:We właściwościach projektu wykonaj następujące czynności:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
http://msdn.microsoft.com/en-us/library/ms976373.aspx#bho_getintouch
Na karcie Zdarzenia kompilacji ustaw wiersz polecenia Zdarzenia po kompilacji na:
Uwaga: mimo że mój komputer to x64, użyłem ścieżki innej niż x64
gacutil.exe
i zadziałało ... ta specyficzna dla x64 jest na:64bit IE Potrzebuje skompilowanego i zarejestrowanego 64-bitowego BHO. Chociaż mogłem debugować tylko przy użyciu 32-bitowego IE11, zarejestrowane rozszerzenie 32-bitowe również działało, uruchamiając 64-bitowy IE11.
Ta odpowiedź zawiera dodatkowe informacje na ten temat: https://stackoverflow.com/a/23004613/195417
Jeśli potrzebujesz, możesz użyć 64-bitowego regasmu:
Jak działa ten dodatek
Nie zmieniłem zachowania dodatku ... spójrz na opis poniżej sekcji IE8.
## Poprzednia odpowiedź dla IE8
Człowieku ... to było dużo pracy! Byłem tak ciekawy, jak to zrobić, że sam to zrobiłem.
Po pierwsze ... kredyt nie jest cały mój. To jest kompilacja tego, co znalazłem na tych stronach:
I oczywiście chciałem, aby moja odpowiedź zawierała funkcje, o które prosiłeś:
Opiszę to krok po kroku, jak udało mi się to zrobić przy pomocy Internet Explorera 8 , w Windows 7 x64 ... zauważ, że nie mogłem testować w innych konfiguracjach. Mam nadzieję, że rozumiesz =)
Tworzenie działającego dodatku do programu Internet Explorer 8
Używam Visual Studio 2010 , C # 4 , .Net Framework 4 , więc niektóre z tych kroków mogą być nieco inne dla Ciebie.
Utworzono bibliotekę klas. Zadzwoniłem do mojego InternetExplorerExtension .
Dodaj te odniesienia do projektu:
Uwaga: te odniesienia mogą znajdować się w różnych miejscach na każdym komputerze.
oto, co zawiera moja sekcja referencji w csproj:
Utwórz pliki w taki sam sposób, jak zaktualizowane pliki IE11.
IEAddon.cs
Możesz odkomentować następujące wiersze z wersji IE11:
Interop.cs
Taki sam jak wersja IE11.
i wreszcie formularz, którego użyjemy do skonfigurowania opcji. W tej formie umieść a
TextBox
i OKButton
. Ustaw DialogResult przycisku na Ok . Kod jest taki sam dla dodatku IE11.We właściwościach projektu wykonaj następujące czynności:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
http://msdn.microsoft.com/en-us/library/ms976373.aspx#bho_getintouch
Na karcie Zdarzenia kompilacji ustaw wiersz polecenia Zdarzenia po kompilacji na:
Uwaga: ponieważ moim komputerem jest x64, na ścieżce programu gacutil na moim komputerze znajduje się określony x64, który może być inny na twoim.
64bit IE Potrzebuje skompilowanego i zarejestrowanego 64-bitowego BHO. Użyj 64-bitowego RegAsm.exe (zwykle mieszka w C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe)
Jak działa ten dodatek
Przechodzi przez całe drzewo DOM, zastępując tekst, skonfigurowany za pomocą przycisku, sam z żółtym tłem. Kliknięcie pożółkłych tekstów wywołuje funkcję javascript, która została dynamicznie wstawiona na stronie. Domyślnym słowem jest „przeglądarka”, więc pasuje do wielu z nich! EDYCJA: po zmianie ciągu, który ma być podświetlony, musisz kliknąć pole adresu URL i nacisnąć Enter ... F5 nie będzie działać, myślę, że dzieje się tak, ponieważ F5 jest uważane za „nawigację” i wymagałoby odsłuchania zdarzenia nawigacyjnego (może). Spróbuję to naprawić później.
Czas już iść. Jestem bardzo zmęczony. Zapraszam do zadawania pytań ... być może nie będę w stanie odpowiedzieć, ponieważ jadę na wycieczkę ... za 3 dni wrócę, ale w międzyczasie postaram się tu przyjechać.
źródło
$(TargetDir)$(TargetFileName)
używać"$(TargetDir)$(TargetFileName)"
2. Jeśli używasz programu Visual Studio 2010 Express, prawdopodobnie (tak) nie widzę opcji Uruchom program zewnętrzny na karcie Debugowanie - I po prostu uruchom IE i przejdź do podanego adresu URL 3. Wygląda na to, że nie działa na IE9 - mogę otworzyć formularz (opcje wyróżnienia), ale nie wiem, jak go podświetlićKolejnym fajnym podejściem byłoby sprawdzenie:
http://www.crossrider.org
Jest to framework oparty na JS z jquery, który pozwala tworzyć rozszerzenia przeglądarek dla IE, FF i Chrome za pomocą jednego wspólnego kodu JS. Zasadniczo framework wykonuje całą paskudną pracę i nie musisz pisać kodu aplikacji.
źródło
Stan rozszerzeń IE jest naprawdę smutny. Masz stary model IE5 Browser Helper Object (tak, te niesławne BHO, które wszyscy lubili blokować w ciągu dnia), paski narzędzi i nowe akceleratory dla IE. Nawet wtedy zgodność czasami się psuje. Kiedyś utrzymywałem rozszerzenie dla IE6, które zepsuło się z IE7, więc niektóre rzeczy się zmieniły. W większości przypadków, o ile wiem (od lat nie dotykałem BHO), nadal musisz je kodować za pomocą Active Template Libraries (coś w rodzaju STL dla COM Microsoftu) i tak samo jest tylko dla C ++. Możesz zrobić COM Interop z C # i uciec od robienia tego w C #, ale prawdopodobnie będzie to zbyt trudne dla tego, co jest warte. Tak czy siak,
http://msdn.microsoft.com/en-us/library/aa753587(v=vs.85).aspx
A dla akceleratorów, które są nowe w IE8, możesz to sprawdzić.
http://msdn.microsoft.com/en-us/library/cc289775(v=vs.85).aspx
Zgadzam się, że dokumentacja jest okropna, a interfejsy API są dość przestarzałe. Nadal mam nadzieję, że to pomoże.
EDYCJA: Chyba mogę tu rzucić ostatnie źródło informacji. Przeglądałem notatki z przeszłości, kiedy pracowałem nad BHO. I to jest artykuł, od którego zacząłem. Jest trochę stary, ale ma dobre wyjaśnienie interfejsów ATL, których będziesz używać podczas pracy z IE BHO (na przykład IObjectWithSite). Myślę, że jest to dość dobrze wyjaśnione i bardzo mi wtedy pomogło. http://msdn.microsoft.com/en-us/library/bb250436.aspx Sprawdziłem również przykład opublikowany przez GregC. Działa z co najmniej IE8 i jest kompatybilny z VS 2010, więc jeśli chcesz zrobić C #, możesz zacząć tam i spojrzeć na książkę Jona Skeeta. (C # w szczegółach 2. edycja) Rozdział 13 zawiera sporo informacji na temat nowych funkcji w C # 4, których można użyć, aby poprawić interakcję z COM. (Nadal polecam zrobienie dodatku w C ++)
źródło
Opracowywanie BHO w języku C # jest bolesne. Wymaga wielu złośliwych kodów COM i wywołań p / invoke.
Mam głównie zakończeniu C # BHO tutaj , które mogą swobodnie korzystać źródło na cokolwiek chcesz. Mówię „głównie” , ponieważ nigdy nie wymyśliłem, jak zapisać appdata w trybie chronionym IE .
źródło
Od lat pracuję nad kontrolką przeglądarki internetowej IE, a w ich trakcie pojawia się jedna nazwa z pomocnymi postami: Igor Tandetnik
Gdybym opracowywał rozszerzenie, kierowałbym reklamy na BHO i zaczynałem wyszukiwanie w:
BHO Igor Tandetnik
LUB
Obiekt pomocnika przeglądarki Igor Tandetnik
Jego posty są często bardzo szczegółowe i wie, o czym mówi.
W programowaniu COM i ATL znajdziesz się do własnych uszu. Przykładowy przewodnik znajduje się na stronie: http://msdn.microsoft.com/en-us/library/ms976373.aspx
źródło
Zgadzam się z Robertem Harveyem, funkcje C # 4.0 poprawiły interoperację COM. Oto trochę starszy kod C #, desperacko potrzebujący ponownego napisania.
http://www.codeproject.com/KB/cs/Attach_BHO_with_C_.aspx
Jest to próba uproszczenia rzeczy poprzez unikanie ATL i korzystanie ze Spartan COM:
C ++ i COM, aby uruchomić BHO
źródło
Jeśli nie próbujesz wymyślić koła na nowo, możesz wypróbować Add In Express dla IE . Użyłem tego produktu do VSTO i jest całkiem niezły. Mają też pomocne forum i szybkie wsparcie.
źródło
Jest oczywiście rozwiązany, ale innym użytkownikom poleciłbym framework SpicIE . Na tej podstawie stworzyłem własne rozszerzenie. Obsługuje tylko Internet Explorer 7/8 oficjalnie, ale przetestowałem go na Internet Explorerze 6-10 (od Windows XP do Windows 8 Consumer Preview) i działa dobrze . Niestety w najnowszej wersji pojawiły się błędy, więc musiałem je naprawić i stworzyć własną wersję: http://archive.msdn.microsoft.com/SpicIE/Thread/View.aspx?ThreadId=5251
źródło
Gorąco polecam wam ten post Pavla Zolnikova opublikowany w 2002 roku!
http://www.codeproject.com/Articles/2219/Extending-Explorer-w--Band-Objects-using-NET-and
Opiera się na wykorzystaniu obiektów Band i jest kompilowany przy użyciu .Net 2.0. Kod źródłowy jest dostępny, otwiera się i dobrze się kompiluje z Visual Studio 2013. Jak czytacie w komentarzach do postów, działa on doskonale dla IE 11 oraz Windows 7 i Windows 10. Działa doskonale dla mnie w Windows 7 + SP1 i IE 11 Ciesz się!
źródło
Pytanie pochodzi z 2013 roku, teraz jest 2020, ale może być pomocne dla przyszłych gości.
Próbowałem zaimplementować odpowiedź @Miguela Angelo, ale na początku nie zadziałało.
Nadal istnieją pewne ustawienia, które należy zdefiniować.
w przeglądarce Internet Explorer (używam IE-11) przejdź do
Tools-->Internet Options-->Advanced
:Zobacz także to pytanie SO i ten przykład z github
źródło
źródło