Однажды я сказал что-то вроде IE о
IE сам написан на C ++ и широко использует COM. Модель расширяемости также основана на COM. По моему опыту, у вас есть следующие компромиссы на выбор:
- Чистый C ++ и COM. Вы строите все с нуля, включая фабрики классов, регистрацию COM-объектов, реализации интерфейсов и т. Д. Вы тратите дополнительный день на реализацию IUnknown, IClassFactory, IObjectWithSite и т. Д., И вы испытываете боль в выяснении того, как работают IConnectionPoint и IConnectionPointContainer , Тем не менее, теперь вы знаете, как все работает, и ваш проект намного легче отлаживать и поддерживать по мере его роста, и вы растете как личность. И я обещаю дать вам полезные ответы, если вы сделаете это таким образом.
- Используйте ATL / MFC и запишите его на C ++. Вы начинаете намного быстрее, потому что все COM-клей и базовые интерфейсы реализованы для вас. Недостатком является то, что вы вырываете волосы из отладочной шаблонной слизи в заголовочных файлах, которые вы не записали, когда что-то пойдет не так. У вас возникают сбои, которые вы не можете объяснить.
- Вы пишете это на C #, и у вас есть все виды GAC, версии времени выполнения и другие проблемы. Только с версией v4 вы можете размещать разные версии одновременно. Вы получаете меньше помощи от форумов, поскольку расширения IE действительно должны быть встроенными и не управляемыми. Вы можете написать кучу взаимодействий (или, по крайней мере, того, что еще не существует на pinvoke.net) и отладки удачи, когда что-то пойдет не так. Более того, IE видит все управляемые расширения как mscore, а не YourExtension.dll, поэтому пользователи часто путаются в пользовательском интерфейсе управления / надстроек. И Microsoft прямо говорит, что не следует писать управляемые расширения Shell, поэтому вы должны убедиться, что только iexplore.exe загружает ваше расширение, а не explorer.exe. И если вы хотите, чтобы он работал на других платформах, у вас будут большие проблемы с его портированием.
Это всего лишь мое мнение, поэтому не стесняйтесь, чтобы получить второе.
Что касается Firefox, вы можете написать множество расширений, даже не используя XPCOM. Их основной моделью расширяемости является XUL + JavaScript, который представляет собой разметку и скрипт. 99% всех расширений могут быть реализованы таким образом. Однако есть некоторые вещи, которые вы просто не можете сделать в их рамках, например, Cooliris, так что вы должны прибегнуть к XPCOM для вызова нативного кода (или NPAPI).
Расширения Chrome - это также Javascript и разметка, но если вы хотите написать плагины для Chrome, которые делают какие-то нативные вещи, вы должны использовать NPAPI, который является C API.
Итак, в целом, вы можете охватить много вопросов с помощью Javascript, XML и HTML, но вы упускаете IE и ограничены в своих возможностях. Если вы хотите пройти весь путь, вам нужно изучить C ++ (и понять тонкие различия между C ++ и C для NPAPI). Я не рекомендую возиться с плагинами браузера на основе C #, несмотря на многочисленные примеры написания панелей инструментов для IE в C #.