Adakah yang punya pengalaman dengan / dalam mengembangkan ekstensi IE yang dapat berbagi pengetahuan? Ini akan mencakup contoh kode, atau tautan ke yang baik, atau dokumentasi pada proses, atau apa pun.
Saya benar-benar ingin melakukan ini, tapi saya memukul tembok raksasa dengan dokumentasi yang buruk, kode yang buruk / contoh kode / kekurangannya. Bantuan / sumber daya apa pun yang dapat Anda tawarkan akan sangat dihargai.
Secara khusus, saya ingin memulai dengan cara mendapatkan akses ke / memanipulasi DOM dari dalam ekstensi IE.
Sunting, bahkan lebih detail:
Idealnya, saya ingin menanam tombol bilah alat yang, ketika diklik, membuka menu yang berisi tautan ke situs eksternal. Saya juga ingin mengakses DOM dan menanam JavaScript pada halaman tergantung pada beberapa kondisi.
Apa cara terbaik untuk mempertahankan informasi dalam ekstensi IE? Di Firefox / Chrome / Sebagian besar browser modern, Anda gunakanwindow.localStorage
, tetapi jelas dengan IE8 / IE7, itu bukan pilihan. Mungkin DB SQLite atau semacamnya? Tidak apa-apa untuk menganggap bahwa .NET 4.0 akan diinstal pada komputer pengguna?
Saya tidak ingin menggunakan Spice IE karena saya ingin membangun yang kompatibel dengan IE9 juga. Saya telah menambahkan tag C ++ ke pertanyaan ini juga, karena jika lebih baik membangunnya di C ++, saya bisa melakukannya.
Jawaban:
[UPDATE] Saya memperbarui jawaban ini agar berfungsi dengan Internet Explorer 11 , di Windows 10 x64 dengan Visual Studio 2017 Community . Versi sebelumnya dari jawaban ini (untuk Internet Explorer 8, di Windows 7 x64 dan Visual Studio 2010) ada di bagian bawah jawaban ini.
Membuat Pengaya Internet Explorer 11 Add-on
Saya menggunakan Visual Studio 2017 Community , C # , .Net Framework 4.6.1 , jadi beberapa langkah ini mungkin sedikit berbeda untuk Anda.
Anda perlu membuka Visual Studio sebagai Administrator untuk membangun solusi, sehingga skrip post-build dapat mendaftarkan BHO (perlu akses registri).
Mulailah dengan membuat perpustakaan kelas. Saya menelepon InternetExplorerExtension milik saya .
Tambahkan referensi ini ke proyek:
"Microsoft Internet Controls"
"Microsoft.mshtml"
Catatan: Entah bagaimana MSHTML tidak terdaftar di sistem saya, meskipun saya dapat menemukannya di jendela Tambahkan Referensi. Ini menyebabkan kesalahan saat membangun:
Perbaikan dapat ditemukan di http://techninotes.blogspot.com/2016/08/fixing-cannot-find-wrapper-assembly-for.html Atau, Anda dapat menjalankan skrip kumpulan ini:
Buat file berikut:
IEAddon.cs
Interop.cs
dan akhirnya formulir, yang akan kita gunakan untuk mengonfigurasi opsi. Dalam formulir ini tempat a
TextBox
dan sebuah OkButton
. Atur DialogResult tombol ke Ok . Tempatkan kode ini dalam kode formulir:Di properti proyek, lakukan hal berikut:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
http://msdn.microsoft.com/en-us/library/ms976373.aspx#bho_getintouch
Di tab Bangun Acara, setel baris perintah acara Bangun ke:
Perhatian: meskipun komputer saya x64, saya menggunakan jalur non-x64
gacutil.exe
dan berhasil ... yang spesifik untuk x64 adalah di:64bit IE Memerlukan BHO 64bit yang dikompilasi dan 64bit. Meskipun saya hanya bisa debug menggunakan IE11 32bit, ekstensi terdaftar 32bit juga bekerja dengan menjalankan 64bit IE11.
Jawaban ini tampaknya memiliki beberapa info tambahan tentang ini: https://stackoverflow.com/a/23004613/195417
Jika perlu, Anda dapat menggunakan regasm 64bit:
Cara kerja pengaya ini
Saya tidak mengubah perilaku add-on ... lihat bagian IE8 di bawah untuk penjelasan.
## Jawaban Sebelumnya untuk IE8
Sobat ... ini sudah banyak pekerjaan! Saya sangat ingin tahu tentang bagaimana melakukan ini, sehingga saya melakukannya sendiri.
Pertama-tama ... kredit bukan milikku. Ini adalah kompilasi dari apa yang saya temukan, di situs-situs ini:
Dan tentu saja, saya ingin jawaban saya memiliki fitur yang Anda tanyakan:
Saya akan menjelaskannya langkah demi langkah, bagaimana saya berhasil melakukannya dengan Internet Explorer 8 , pada Windows 7 x64 ... perhatikan bahwa saya tidak dapat menguji dalam konfigurasi lain. Semoga Anda mengerti =)
Membuat Pengaya Internet Explorer 8 yang Bekerja
Saya menggunakan Visual Studio 2010 , C # 4 , .Net Framework 4 , jadi beberapa langkah ini mungkin sedikit berbeda untuk Anda.
Membuat perpustakaan kelas. Saya menelepon InternetExplorerExtension milik saya .
Tambahkan referensi ini ke proyek:
Catatan: Referensi ini mungkin ada di tempat yang berbeda di setiap komputer.
inilah isi bagian referensi saya di csproj:
Buat file dengan cara yang sama seperti file IE11 yang diperbarui.
IEAddon.cs
Anda dapat menghapus komentar baris berikut dari versi IE11:
Interop.cs
Sama seperti versi IE11.
dan akhirnya formulir, yang akan kita gunakan untuk mengonfigurasi opsi. Dalam formulir ini tempat a
TextBox
dan sebuah OkButton
. Atur DialogResult tombol ke Ok . Kode ini sama untuk addon IE11.Di properti proyek, lakukan hal berikut:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
http://msdn.microsoft.com/en-us/library/ms976373.aspx#bho_getintouch
Di tab Bangun Acara, setel baris perintah acara Bangun ke:
Perhatian: karena komputer saya adalah x64, ada x64 khusus di dalam jalur gacutil yang dapat dieksekusi di komputer saya yang mungkin berbeda pada Anda.
64bit IE Memerlukan BHO 64bit yang dikompilasi dan 64bit. Gunakan 64bit RegAsm.exe (biasanya hidup di C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe)
Cara kerja pengaya ini
Itu melintasi semua pohon DOM, mengganti teks, dikonfigurasi menggunakan tombol, dengan sendirinya dengan latar belakang kuning. Jika Anda mengklik teks yang dikuning, itu memanggil fungsi javascript yang dimasukkan pada halaman secara dinamis. Kata default adalah 'browser', sehingga sangat cocok dengan mereka! Sunting: setelah mengubah string yang akan disorot, Anda harus mengklik kotak URL dan tekan Enter ... F5 tidak akan berfungsi, saya pikir itu karena F5 dianggap sebagai 'navigasi', dan perlu mendengarkan acara navigasi. (mungkin). Saya akan mencoba memperbaikinya nanti.
Sekarang saatnya untuk pergi. Saya sangat lelah. Jangan ragu untuk bertanya ... mungkin saya tidak akan dapat menjawab karena saya akan melakukan perjalanan ... dalam 3 hari saya kembali, tetapi saya akan mencoba untuk datang ke sini sementara itu.
sumber
$(TargetDir)$(TargetFileName)
menggunakan"$(TargetDir)$(TargetFileName)"
2. Jika Anda menggunakan Visual Studio 2010 Express Anda mungkin (saya lakukan) tidak melihat opsi Mulai Program Eksternal di tab Debug - I cukup jalankan IE dan arahkan ke URL yang disediakan 3. Tampaknya tidak berfungsi pada IE9 - Saya dapat membuka formulir (opsi Penyorot) tetapi saya tidak tahu bagaimana membuatnya menyorot teksPendekatan keren lainnya adalah dengan memeriksa:
http://www.crossrider.org
Ini adalah kerangka kerja berdasarkan JS dengan jquery yang memungkinkan Anda mengembangkan ekstensi browser untuk IE, FF dan Chrome menggunakan kode JS umum tunggal. Pada dasarnya kerangka kerja melakukan semua pekerjaan buruk dan Anda pergi dengan menulis kode aplikasi Anda.
sumber
Keadaan untuk ekstensi IE sebenarnya cukup menyedihkan. Anda memiliki model lama dari IE5 Browser Helper Object (ya, BHOs terkenal yang disukai semua orang pada hari itu), toolbar dan akselerator baru untuk IE. Meski begitu, kompatibilitas kadang-kadang akan rusak. Saya dulu memelihara ekstensi untuk IE6 yang putus dengan IE7, jadi ada beberapa hal yang telah berubah. Untuk sebagian besar, sejauh yang saya tahu (saya belum menyentuh BHO selama bertahun-tahun), Anda masih perlu kode mereka menggunakan Perpustakaan Template Aktif (seperti STL untuk COM Microsoft) dan juga hanya untuk C ++. Anda dapat melakukan COM Interop dengan C # dan berhasil melakukannya dalam C # tetapi mungkin akan terlalu sulit untuk apa nilainya. Bagaimanapun,
http://msdn.microsoft.com/en-us/library/aa753587(v=vs.85).aspx
Dan untuk akselerator yang baru di IE8 Anda bisa memeriksa yang ini.
http://msdn.microsoft.com/en-us/library/cc289775(v=vs.85).aspx
Saya setuju bahwa dokumentasinya mengerikan, dan APInya sudah ketinggalan jaman. Tetap saya harap ini membantu.
EDIT: Saya kira saya bisa melempar satu sumber informasi terakhir ke sini. Saya melihat-lihat catatan saya saat saya mengerjakan BHO. Dan ini adalah artikel yang membuat saya memulai dengan mereka. Ini agak tua, tetapi memiliki penjelasan yang baik tentang antarmuka ATL yang akan Anda gunakan ketika bekerja dengan IE BHOs (IObjectWithSite misalnya). Saya pikir itu dijelaskan dengan cukup baik dan banyak membantu saya saat itu. http://msdn.microsoft.com/en-us/library/bb250436.aspx Saya juga memeriksa contoh yang diposting GregC. Ini berfungsi dengan setidaknya IE8, dan itu kompatibel dengan VS 2010, jadi jika Anda ingin melakukan C # Anda dapat memulai di sana dan melihat Buku Jon Skeet. (C # dalam Kedalaman edisi ke-2) Bab 13 memiliki banyak informasi tentang fitur-fitur baru dalam C # 4 yang dapat Anda gunakan untuk membuat interaksi dengan COM lebih baik. (Saya masih menyarankan Anda melakukan addin di C ++)
sumber
Mengembangkan C # BHO adalah hal yang menyakitkan. Ini melibatkan banyak kode COM yang menjijikkan dan panggilan p / invoke.
Saya memiliki sebagian besar selesai C # BHO di sini , yang Anda bebas menggunakan sumbernya untuk apa pun yang Anda inginkan. Saya katakan "sebagian besar" , karena saya tidak pernah tahu bagaimana cara menyimpan appdata di bawah IE Protected Mode .
sumber
Saya telah bekerja dengan kontrol browser web IE selama bertahun-tahun sekarang, dan seiring berjalannya waktu, satu nama muncul berulang kali dengan posting yang membantu: Igor Tandetnik
Jika saya mengembangkan ekstensi, saya akan menargetkan BHO, dan mulai googling untuk:
BHO Igor Tandetnik
ATAU
Browser Helper Object Igor Tandetnik
Postingnya sering sangat rinci, dan dia tahu apa yang dia bicarakan.
Anda akan mendapati diri Anda siap mendengarkan pemrograman COM dan ATL. Untuk panduan langkah-langkah sampel, periksa: http://msdn.microsoft.com/en-us/library/ms976373.aspx
sumber
Saya setuju dengan Robert Harvey, fitur C # 4.0 ditingkatkan interop COM. Ini sedikit kode C # yang lebih lama, sangat membutuhkan penulisan ulang.
http://www.codeproject.com/KB/cs/Attach_BHO_with_C_.aspx
Ini adalah upaya untuk menyederhanakan berbagai hal dengan menghindari ATL dan menggunakan Spartan COM:
C ++ dan COM untuk menjalankan BHO
sumber
Jika Anda tidak mencoba menemukan kembali roda, Anda dapat mencoba Add In Express untuk IE . Saya telah menggunakan produk untuk barang-barang VSTO , dan itu cukup bagus. Mereka juga memiliki forum yang bermanfaat dan dukungan cepat.
sumber
Ini jelas diselesaikan, tetapi untuk pengguna lain, saya akan merekomendasikan kerangka kerja SpicIE . Saya telah membuat ekstensi sendiri berdasarkan itu. Ini hanya mendukung Internet Explorer 7/8 secara resmi, tapi saya mengujinya di Internet Explorer 6-10 (dari Windows XP ke Windows 8 Consumer Preview) dan berfungsi dengan baik . Sayangnya ada beberapa bug dalam rilis terbaru, jadi saya harus memperbaikinya dan membuat rilis saya sendiri: http://archive.msdn.microsoft.com/SpicIE/Thread/View.aspx?ThreadId=5251
sumber
Saya dengan hangat menyarankan Anda posting Pavel Zolnikov ini diterbitkan pada tahun 2002!
http://www.codeproject.com/Articles/2219/Extending-Explorer-with-Band-Objects-using-NET-and
Ini didasarkan pada penggunaan objek Band dan dikompilasi menggunakan. Net 2.0. Kode sumber disediakan dan dibuka serta dikompilasi dengan baik dengan Visual Studio 2013. Seperti yang akan Anda baca di posting komentar itu bekerja dengan sangat baik untuk IE 11 dan pada Windows 7 dan Windows 10. Ini bekerja dengan baik untuk saya pada Windows 7 + SP1 dan IE 11 Selamat Menikmati!
sumber
Pertanyaannya adalah dari tahun 2013, sekarang tahun 2020, tetapi mungkin bermanfaat bagi pengunjung masa depan.
Saya mencoba menerapkan jawaban @Miguel Angelo, itu tidak berhasil di awal.
Masih ada beberapa pengaturan yang Anda definisikan.
di internet explorer (Saya menggunakan IE-11) buka
Tools-->Internet Options-->Advanced
:Lihat juga pertanyaan SO ini dan contoh ini dari github
sumber
sumber