Кто-нибудь здесь имеет опыт разработки / расширения IE, который может поделиться своими знаниями? Это будет включать примеры кода, или ссылки на хорошие, или документацию по процессу, или что-нибудь еще.
Я действительно хочу сделать это, но я попадаю в гигантскую стену с паршивой документацией, паршивым кодом / примером кода / его отсутствием. Любая помощь / ресурсы, которые вы можете предложить, будет принята с благодарностью.
В частности, я хотел бы начать с того, как получить доступ к DOM / манипулировать им из расширения IE.
РЕДАКТИРОВАТЬ, даже больше деталей:
В идеале я хотел бы установить кнопку на панели инструментов, чтобы при нажатии на нее появлялось меню, содержащее ссылки на внешние сайты. Я также хотел бы получить доступ к DOM и установить JavaScript на странице в зависимости от некоторых условий.
Каков наилучший способ сохранить информацию в расширении IE? В Firefox / Chrome / большинстве современных браузеров вы используете window.localStorage
, но, очевидно, с IE8 / IE7, это не вариант. Может быть, БД SQLite или такой? Можно предположить, что .NET 4.0 будет установлен на компьютере пользователя?
Я не хочу использовать Spice IE, поскольку хочу создать тот, который совместим также с IE9. Я также добавил тег C ++ к этому вопросу, потому что, если его лучше создать в C ++, я могу это сделать.
Ответы:
[ОБНОВЛЕНИЕ] Я обновляю этот ответ для работы с Internet Explorer 11 , в Windows 10 x64 с сообществом Visual Studio 2017 . Предыдущая версия этого ответа (для Internet Explorer 8, в Windows 7 x64 и Visual Studio 2010) находится в нижней части этого ответа.
Создание работающей надстройки Internet Explorer 11
Я использую Visual Studio 2017 Community , C # , .Net Framework 4.6.1 , поэтому некоторые из этих шагов могут немного отличаться для вас.
Вам нужно открыть Visual Studio от имени администратора, чтобы построить решение, чтобы скрипт после сборки мог зарегистрировать BHO (требуется доступ к реестру).
Начните с создания библиотеки классов. Я назвал мой InternetExplorerExtension .
Добавьте эти ссылки в проект:
"Microsoft Internet Controls"
"Microsoft.mshtml"
Примечание. Каким-то образом MSHTML не был зарегистрирован в моей системе, хотя я мог найти его в окне «Добавить ссылку». Это вызвало ошибку при сборке:
Исправление можно найти по адресу http://techninotes.blogspot.com/2016/08/fixing-cannot-find-wrapper-assembly-for.html. Или вы можете запустить этот пакетный скрипт:
Создайте следующие файлы:
IEAddon.cs
Interop.cs
и, наконец, форма, которую мы будем использовать для настройки параметров. В этой форме поместите
TextBox
и ОКButton
. Установите для DialogResult кнопки значение Ok . Поместите этот код в код формы:В свойствах проекта сделайте следующее:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
http://msdn.microsoft.com/en-us/library/ms976373.aspx#bho_getintouch
На вкладке «События сборки» установите в командной строке « События после сборки» :
Внимание: несмотря на то, что у меня компьютер x64, я использовал путь не x64,
gacutil.exe
и он сработал ... специфичный для x64:64-битному IE требуется 64-битная компиляция и 64-битная регистрация BHO. Хотя я мог отлаживать только с помощью 32-битного IE11, 32-битное зарегистрированное расширение также работало, запустив 64-битный IE11.
Этот ответ содержит дополнительную информацию об этом: https://stackoverflow.com/a/23004613/195417
Если вам нужно, вы можете использовать 64-битный регазм:
Как работает это дополнение
Я не изменил поведение надстройки ... посмотрите описание IE8 в разделе ниже.
## Предыдущий ответ для IE8
Человек ... это было много работы! Мне было так интересно, как это сделать, что я сделал это сам.
Прежде всего ... кредит не весь мой. Это компиляция того, что я нашел на этих сайтах:
И, конечно же, я хотел, чтобы в моем ответе были функции, которые вы спрашивали:
Я опишу это шаг за шагом, как мне удалось это сделать, работая с Internet Explorer 8 , в Windows 7 x64 ... обратите внимание, что я не смог протестировать в других конфигурациях. Надеюсь, вы понимаете =)
Создание работающей надстройки Internet Explorer 8
Я использую Visual Studio 2010 , C # 4 , .Net Framework 4 , поэтому некоторые из этих шагов могут немного отличаться для вас.
Создана библиотека классов. Я назвал мой InternetExplorerExtension .
Добавьте эти ссылки в проект:
Примечание. Эти ссылки могут находиться в разных местах на каждом компьютере.
это то, что мой раздел ссылок в csproj содержит:
Создайте файлы так же, как обновленные файлы IE11.
IEAddon.cs
Вы можете раскомментировать следующие строки из версии IE11:
Interop.cs
То же, что версия IE11.
и, наконец, форма, которую мы будем использовать для настройки параметров. В этой форме поместите
TextBox
и ОКButton
. Установите для DialogResult кнопки значение Ok . Код такой же для аддона IE11.В свойствах проекта сделайте следующее:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
http://msdn.microsoft.com/en-us/library/ms976373.aspx#bho_getintouch
На вкладке «События сборки» установите в командной строке « События после сборки» :
Внимание: поскольку у меня компьютер x64, на пути к исполняемому файлу gacutil на моем компьютере есть определенный x64, который может отличаться на вашем.
64-битному IE требуется 64-битная компиляция и 64-битная регистрация BHO. Используйте 64-битный RegAsm.exe (обычно находится в C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe)
Как работает это дополнение
Он пересекает все дерево DOM, заменяя текст, настроенный с помощью кнопки, на желтый фон. Если вы щелкнете по пожелтевшим текстам, он вызовет функцию JavaScript, которая была вставлена на страницу динамически. Слово по умолчанию - «браузер», так что оно соответствует большинству из них! РЕДАКТИРОВАТЬ: после изменения строки, которая будет выделена, вы должны нажать на поле URL и нажать Enter ... F5 не будет работать, я думаю, что это потому, что F5 рассматривается как «навигация», и это потребует прослушивания события навигации (может быть). Я постараюсь исправить это позже.
Теперь пришло время идти. Я очень устал. Не стесняйтесь задавать вопросы ... может быть, я не смогу ответить, так как я собираюсь в путешествие ... через 3 дня я вернусь, но я постараюсь приехать сюда тем временем.
источник
$(TargetDir)$(TargetFileName)
использования"$(TargetDir)$(TargetFileName)"
2. Если вы используете Visual Studio 2010 Express, вы, вероятно, (я не) не вижу опцию « Запустить внешнюю программу» на вкладке «Отладка» - я просто запустите IE и перейдите по указанному URL-адресу 3. Кажется, он не работает в IE9 - я могу открыть форму (параметры выделения), но я не знаю, как заставить ее выделять текстЕще один крутой подход - проверить:
http://www.crossrider.org
Это основа, основанная на JS с jquery, которая позволяет разрабатывать расширения для браузеров для IE, FF и Chrome, используя единый общий код JS. По сути, фреймворк выполняет всю отвратительную работу, и у вас остается написание кода приложений.
источник
Состояние расширений IE на самом деле довольно печальное. У вас есть старая модель IE5 Browser Helper Object (да, те печально известные BHO, которые все любили блокировать в прошлом), панели инструментов и новые ускорители для IE. Даже тогда совместимость иногда будет нарушаться. Раньше я поддерживал расширение для IE6, которое порвалось с IE7, поэтому некоторые вещи изменились. По большей части, насколько я знаю (я не касался BHOs в течение многих лет), вам все еще нужно кодировать их с использованием Active Template Libraries (вроде STL для Microsoft COM), а также только для C ++. Вы могли бы сделать COM Interop с C # и уйти с этим в C #, но, вероятно, это будет слишком сложно для того, чтобы оно того стоило. Тем не мение,
http://msdn.microsoft.com/en-us/library/aa753587(v=vs.85).aspx
А для ускорителей, которые являются новыми в IE8, вы можете проверить это.
http://msdn.microsoft.com/en-us/library/cc289775(v=vs.85).aspx
Я согласен, что документация ужасна, а API довольно устарели. Тем не менее, я надеюсь, что это помогает.
РЕДАКТИРОВАТЬ: Я думаю, что я могу добавить один последний источник информации здесь. Я просматривал свои записи назад, когда работал над BHO. И это статья, которая заставила меня начать с них. Он довольно старый, но имеет хорошее объяснение интерфейсов ATL, которые вы будете использовать при работе с IE BHO (например, IObjectWithSite). Я думаю, что это довольно хорошо объяснено и помогло мне много тогда. http://msdn.microsoft.com/en-us/library/bb250436.aspx Я также проверил пример, который опубликовал GregC. Он работает по крайней мере с IE8 и совместим с VS 2010, поэтому если вы хотите использовать C #, вы можете начать там и взглянуть на книгу Джона Скита. (C # в Depth 2nd edition) Глава 13 содержит много информации о новых функциях в C # 4, которые вы можете использовать для улучшения взаимодействия с COM. (Я все еще рекомендовал бы вам делать надстройку в C ++)
источник
Разработка C # BHO - это боль в заднице. Он включает в себя много неприличного COM-кода и вызовов p / invoke.
У меня в основном закончили C # BHO здесь , которые вы можете использовать источник для все , что вы хотите. Я говорю «в основном» , потому что я так и не понял, как сохранить данные приложения в защищенном режиме IE .
источник
Я уже много лет работаю с браузерным браузером IE, и одно из них снова и снова встречается с полезными сообщениями: Игорь Тандетник
Если бы я разрабатывал расширение, я бы нацелился на BHO и начал поискать в Google:
БХО Игорь Тандетник
ИЛИ
Browser Helper Object Игорь Тандетник
Его сообщения часто очень подробны, и он знает, о чем говорит.
Вы найдете себя в ушах в программировании COM и ATL. Для ознакомления с образцом ознакомьтесь с http://msdn.microsoft.com/en-us/library/ms976373.aspx
источник
Я согласен с Робертом Харви, в C # 4.0 улучшено взаимодействие с COM. Вот немного старого кода C #, остро нуждающегося в переписывании.
http://www.codeproject.com/KB/cs/Attach_BHO_with_C_.aspx
Это попытка упростить вещи, избегая ATL и переходя на Spartan COM:
C ++ и COM для запуска BHO
источник
Если вы не пытаетесь изобретать велосипед, вы можете попробовать добавить In Express для IE . Я использовал продукт для материала VSTO , и он довольно хорош. Также у них есть полезный форум и быстрая поддержка.
источник
Это, очевидно, решаемо , но для других пользователей я бы порекомендовал SpicIE framework . Я сделал собственное расширение на его основе. Он официально поддерживает только Internet Explorer 7/8, но я проверил это на Internet Explorer 6-10 (от Windows XP до Windows 8 Consumer Preview) и работает нормально . К сожалению, в последнем выпуске были некоторые ошибки, поэтому мне пришлось их исправить и сделать свой собственный выпуск: http://archive.msdn.microsoft.com/SpicIE/Thread/View.aspx?ThreadId=5251
источник
Сердечно предлагаю вам этот пост Павла Зольникова, опубликованный в 2002 году!
http://www.codeproject.com/Articles/2219/Extending-Explorer-with-Band-Objects-using-NET-and
Он основан на использовании объектов Band и скомпилирован с использованием .Net 2.0. Исходный код предоставляется, открывается и хорошо компилируется с Visual Studio 2013. Как вы прочтете в комментариях к посту, он отлично работает для IE 11, Windows 7 и Windows 10. Он отлично работает для меня в Windows 7 + SP1 и IE. 11 Наслаждайтесь!
источник
Вопрос с 2013 года, сейчас 2020, но может быть полезным для будущих посетителей.
Я пытался реализовать ответ @Miguel Angelo, в начале он не работал.
Там еще есть некоторые настройки, которые вам определятся.
в Internet Explorer (я использую IE-11) перейти к
Tools-->Internet Options-->Advanced
:Также посмотрите этот ТАК вопрос и этот пример из github
источник
источник